我需要一个函数来重复每一秒。我试过了两个
for (;;) {}
和
while(true){}
但是当我运行编译的程序时,该函数只运行一次。
对不起,这是完整的功能
#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);
}
}
这只运行一次而不是继续检查。
答案 0 :(得分:2)
while(true){
//Do something
}
应该可以工作,但通常你应该避免使用无限循环而不是像
那样bool isRunning = true;
while( isRunning ){
//Do something
}
通过这种方式,您可以在需要时终止循环。
答案 1 :(得分:2)
for(;;)和while(1)的两个循环都用于无限循环。这就是你的程序的样子:
for (;;) // or while(1), doesn't matter
{
function();
sleep(1000);
}
如果这对您不起作用,则必须提供更多代码,因为我没有看到其他原因导致无效。
哦,我必须说sleep()函数在各种平台上的实现方式不同。你必须找到工具箱中的值是以秒或毫秒为单位(如果sleep(1000)不起作用,请尝试sleep(1))。
答案 2 :(得分:0)
您可以使用计时器,并将间隔设置为1秒,这将每秒触发并执行您需要的操作。