Как сделать процесс программирования на С++ в фоновом режиме до тех пор, пока компьютер не выключится?

  • Windows:

    • Можно ли сделать программу на С++ исполняемой в фоновом режиме без отображения Консоли или графического интерфейса? И, как?

    • Как мне сделать процесс, пока компьютер не выключится?

    • Как мне поддерживать выполнение функции, пока эта программа активна, пожалуйста?

IDE: Visual Studio 2013

Ответы

Ответ 1

Шаг 1: Если вы используете IDE, тогда во время создания проекта, скорее всего, спросите "console-app" и "window-app". Выберите window-app, что означает, что он начнется без открытия консоли.

enter image description hereenter image description here

Шаг 2: Теперь, в коде, вы, вероятно, создадите код, который сделает окно видимым. Удалите этот код:

enter image description here

Ваша программа теперь выполняется, но не отображается на панели задач:.

enter image description here

Для запуска вашего собственного кода у вас есть 2 варианта. Какой из них подходит, зависит от вашей ситуации, но в целом предпочтительнее:

  • либо используйте один из сгенерированных методов, таких как WinMain, чтобы запустить свой собственный метод, который должен содержать цикл и внутри этого цикла ваш код плюс вызов Sleep().

  • использовать окна-сообщения для запуска некоторых ваших кодов по требованию. (предпочтительным)

Программа будет работать до тех пор, пока ваш компьютер не будет выключен; то он больше не будет работать.


Несколько примечаний о том, когда использовать опцию 1 по сравнению с опцией 2:

Вариант 2 - это то, что обычно считается лучше, потому что оно работает с операционной системой (Windows), оно только выполняет код, когда ОС сообщает, что что-то изменилось. Вариант 1, с другой стороны, не зависит от оконных сообщений - иногда вам нужна эта независимость. Это происходит по цене: ваш код, вероятно, "вручную" проверяет, что-то изменилось, иногда что-то делает, но большую часть времени выбирает Sleep(). Это называется - > опрос btw. поэтому предпочитайте вариант 2.


И вот как модифицировать WndProc для вариантов-2-приложений. Пример: делать звуковой сигнал каждую секунду.

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:
    ...

Ответ 2

Для этого вам нужно скрыть свое окно.

Для консоли: ShowWindow (GetConsoleWindow(), SW_HIDE);

Для проекта Win32: либо не создавайте окно с помощью CreateWindow или CreateWindowEx, либо ShowWindow(hWnd, SW_HIDE)


Или лучшее решение, вы можете создать сервис, несколько примеров