C++ 如何制作C++;在后台编程过程,直到计算机';它关闭了吗?

C++ 如何制作C++;在后台编程过程,直到计算机';它关闭了吗?,c++,windows,C++,Windows,窗口: >P>是否可以在后台执行C++程序而不显示控制台或GUI?还有,怎么做 我该如何让它一直运行到计算机关闭 请问,在该程序处于活动状态时,如何维护正在执行的函数 IDE:Visual Studio 2013步骤1:如果您正在使用IDE,则在项目创建过程中,它很可能会询问“控制台应用程序”与“窗口应用程序”。选择window app,这意味着它将在不打开控制台的情况下启动 步骤2:现在,在代码中,您的IDE可能已经生成了一些代码,使窗口可见。删除该代码: 您的程序现在运行,但在任

窗口:

>P>是否可以在后台执行C++程序而不显示控制台或GUI?还有,怎么做

  • 我该如何让它一直运行到计算机关闭

  • 请问,在该程序处于活动状态时,如何维护正在执行的函数


  • IDE:Visual Studio 2013

    步骤1:如果您正在使用IDE,则在项目创建过程中,它很可能会询问“控制台应用程序”与“窗口应用程序”。选择window app,这意味着它将在不打开控制台的情况下启动

    步骤2:现在,在代码中,您的IDE可能已经生成了一些代码,使窗口可见。删除该代码:

    您的程序现在运行,但在任务栏上不可见:

    对于运行自己的代码,您有两个选择。其中哪一个是合适的取决于您的情况,但第二个通常是首选的:

    • 或者使用生成的方法之一(如WinMain)启动您自己的方法,该方法应包含一个循环,在该循环中,您的代码加上对Sleep()的调用

    • 使用windows消息按需运行某些代码。(首选

    该程序将一直运行,直到您的计算机关闭;然后它将不再运行


    关于何时使用选项1和选项2的一些注意事项:

    选项2通常被认为更好,因为它与操作系统(Windows)配合使用,只有当操作系统告诉它发生了变化时,它才会执行代码另一方面,选项1不依赖于windows消息-有时您需要这种独立性。但这是有代价的:您的代码可能会“手动”检查是否有更改,有时会执行某些操作,但大多数情况下会选择Sleep()。这被称为btw。所以选择选项2


    这是如何修改选项2-apps的WndProc。示例:每秒发出一声嘟嘟声

    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        int wmId, wmEvent;
        PAINTSTRUCT ps;
        HDC hdc;
        switch (message)
        {
        #define IDT_TIMER1 123 // todo find out which numbers are allowed
                               // which depends on windows AND your organization
        case WM_CREATE:
            SetTimer(hWnd, IDT_TIMER1, 1000, (TIMERPROC) NULL);
        break;
        case WM_TIMER: 
            switch (wParam) { 
            case IDT_TIMER1:
                Beep(100,50);
            break;
            }
        break;
        case WM_COMMAND:
        ...
    

    为此,您需要隐藏窗口

    对于控制台:
    ShowWindow(GetConsoleWindow(),SW\u HIDE)

    对于Win32项目:不要使用
    CreateWindow
    CreateWindowEx
    创建窗口,或
    ShowWindow(hWnd,SW\u HIDE)



    或者最好的解决方案,您可以创建服务,

    这是隐藏窗口的方式:

    void main() {
        HWND window;
        AllocConsole();
        window = FindWindowA("ConsoleWindowClass", NULL);
        ShowWindow(window, 0);
        //close program when Esc pressed
        if (GetAsyncKeyState(VK_ESCAPE) & 0x8000) {
            return 0;
        }
    }
    

    在linux中,这种进程称为
    守护进程
    ,感谢您的响应,那么程序从哪里开始处理呢?没有主功能吗?第二个和第三个问题是什么?你能更详细地说明这两个选项吗?请注意,至少在Windows上,有些东西需要一个窗口,例如在通知区域显示图标。因此,一些完全在后台运行的应用程序为此提供了一个不可见的窗口。没关系,谢谢大家。还有一个问题:如何基于第二个选项创建新项目?@user3278631谢谢。我还添加了一些关于如何在option-2-apps中使用windows消息的信息。