跨平台main.cpp模板

#include "StdAfx.h"
#include <iostream>
#ifdef WIN32
#else
#include <unistd.h> 
#include <sys/types.h>
#include <signal.h>
#endif

void svr_signal()
{
    signal(SIGINT, [](int signo){
        CLogMgr::instance()->writeLog(GB("收到终止程序信号 %1,忽略信号").arg(signo));
        std::this_thread::sleep_for(std::chrono::milliseconds(1000));
        //raise(SIGINT);
    });
}

int main(int argc, char** argv)
{
    svr_signal();

    App app(argc, argv);
    int nCode = 1000;
    try
    {
        if (app.initInstance())
        {
            nCode=app.run();
        }

        if (nCode == 1000)
        {
            ///杀死当前进程
#ifdef WIN32
            DWORD dwProcessID = ::GetCurrentProcessId();  //获取当前进程ID号
            HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE,FALSE,dwProcessID); //根据进程ID返回对象句柄
            ::TerminateProcess(hProcess,0);  //根据对象句柄结束进程
            CloseHandle(hProcess);
#else
            pid_t pid = getpid();  
            int n = kill(pid,0);
#endif
            return 0;
        }
        app.exitInstance();
    }
    catch(Exception * e)
    {
        std::cout << "程序发生异常:" <<  std::endl;
        delete e;
        app.exitInstance();
        nCode=-1;
    }
    return nCode;
}
posted @ 2020-01-13 17:03  osbreak  阅读(444)  评论(0)    收藏  举报