Как сделать бесконечный цикл в C ++? (Windows) - PullRequest
0 голосов
/ 22 января 2012

Мне нужно, чтобы функция повторялась каждую секунду.Я пробовал оба

for (;;) {}

и

while(true){}

Но когда я запускаю скомпилированную программу, функция запускается только один раз.

Извините, вот полныйfunction

#define WINDOWS_LEAN_AND_MEAN
#define _WIN32_WINNT 0x0500 
#include <windows.h> 
#include <iostream> 

// do something after 10 minutes of user inactivity
static const unsigned int idle_milliseconds = 60*10*1000;
// wait at least an hour between two runs
static const unsigned int interval = 60*60*1000;

int main() {

    LASTINPUTINFO last_input;
    BOOL screensaver_active;

    // main loop to check if user has been idle long enough
    for (;;) {
        if ( !GetLastInputInfo(&last_input)
          || !SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0,  
                                   &screensaver_active, 0))
        {
            std::cerr << "WinAPI failed!" << std::endl;
            return EXIT_FAILURE;
        }

        if (last_input.dwTime < idle_milliseconds && !screensaver_active) {
            // user hasn't been idle for long enough
            // AND no screensaver is running
            Sleep(1000);
            continue;
        }

        // user has been idle at least 10 minutes
        HWND hWnd = GetConsoleWindow(); 
    ShowWindow( hWnd, SW_HIDE ); 
    system("C:\\Windows\\software.exe");
        // done. Wait before doing the next loop.
        Sleep(interval);
    }
}

Этот прогон выполняется только один раз вместо продолжения проверки.

Ответы [ 3 ]

2 голосов
/ 22 января 2012

Оба цикла for (;;) и while (1) используются для бесконечных циклов.Вот как должна выглядеть ваша программа:

for (;;) // or while(1), doesn't matter
{
    function();
    sleep(1000);
}

Если это не сработает, вам придется предоставить больше кода, потому что я не вижу других причин, по которым он не будет работать.

О, и я должен сказать, что функция sleep () реализована по-разному на разных платформах.Вы должны найти значение в секундах или миллисекундах в вашем наборе инструментов (если sleep (1000) не работает, попробуйте sleep (1)).

2 голосов
/ 22 января 2012
while(true){
  //Do something
}

должно работать, но обычно вам следует избегать бесконечных циклов, вместо этого делать что-то вроде

bool isRunning = true;
while( isRunning ){
  //Do something
}

таким образом, вы сможете завершить цикл, когда вам это нужно.

0 голосов
/ 22 января 2012

Вы можете использовать таймер и установить интервал равным 1 секунде, он будет срабатывать каждую секунду и делать то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...