Exemple #1
0
USING_NS_IOCPSERVD

NS_IOCPSERVD_BEGIN

int IocpServd_main(int argc, char *argv[])
{
    using namespace jimi;

    jmLog.log_begin();

    bool isService = true;
    jimi::CommandLine cmdLine;
    int cnt;
    if ((cnt = cmdLine.parse(argc, argv)) >= 0) {
        std::string strCmdLine = cmdLine.getCmdLine();
        jmLog.info(strCmdLine.c_str());
    }

    IocpServdService *service = new IocpServdService();
    if (service) {
        IocpServdService::SetInstance(service, true);

        service->SetServiceName(g_ServiceName);
        service->SetServiceDisplayName(g_ServiceDisplayName);
        service->SetServiceDescription(g_ServiceDescription);

        jmLog.info("cmdLine.parse(argc, argv): argc_cnt = %d", cnt);

        if (cmdLine.hasArgument("-run") || cmdLine.hasArgument("/run")
            || cmdLine.hasArgument("-r") || cmdLine.hasArgument("/r")) {
            service->RunService();
            //service->RunServiceEx(g_ServiceTable);
        }
        else if (cmdLine.hasArgument("-install") || cmdLine.hasArgument("/install")
            || cmdLine.hasArgument("-i") || cmdLine.hasArgument("/i")) {
            service->InstallService();
        }
        else if (cmdLine.hasArgument("-uninstall") || cmdLine.hasArgument("/uninstall")
            || cmdLine.hasArgument("-u") || cmdLine.hasArgument("/u")
            || cmdLine.hasArgument("-uninst") || cmdLine.hasArgument("/uninst")) {
            service->UninstallService();
        }
        else {
            // is not a windows service
            isService = false;
        }

        if (service) {
            //service->Destroy();
            delete service;
        }
    }

    printf("\n");

#if 1
    SampleThread *thread = new SampleThread();
    thread->Start();
    thread->Join();
    thread->Abort(1000);
    if (thread) {
        delete thread;
    }

    WorkerThread *workerThread = new WorkerThread();
    workerThread->Start();
    workerThread->Join();
    if (workerThread) {
        delete workerThread;
    }

    printf("\n");
#endif

     do {
        jimi::Object *object = new jimi::Object();
        jimi::Object newObject = object->Clone();
        printf("newObject.Equals(object) = %d\n\n", newObject.Equals(object));
        object->Close();
        newObject.Close();
        if (object)
            delete object;
    } while (0);

    printf("\n");

    do {
        csharp::ManualResetEvent *event = new csharp::ManualResetEvent(false);
        //ManualResetEvent event2(false);
        csharp::EventWaitHandle *event3 = new csharp::EventWaitHandle();
        csharp::EventWaitHandle *event_base = (csharp::EventWaitHandle *)event;
        event->Set();
        event->Reset();
        if (event_base) {
            delete event_base;
            event_base = NULL;
        }
        if (event) {
            //delete event;
            event = NULL;
        }
        bool bSignal = event3->WaitOne();
        if (event3)
            delete event3;
    } while (0);

    printf("\n");

    ///*
    //mt::mutex read_mutex;
    //mt::scoped_lock<mt::mutex> lock(read_mutex);
    mt::mutex read_mutex;
    mt::scoped_lock<mt::mutex> lock(read_mutex);
    lock.acquire(read_mutex);
    lock.try_acquire(read_mutex, 4000);
    lock.release();
    //*/

    if (!isService)
        ::system("pause");

    jmLog.log_end();
    return 0;
}