C++ 如何在c++;?(窗口)

C++ 如何在c++;?(窗口),c++,windows,loops,C++,Windows,Loops,我需要一个每秒重复一次的函数。我两个都试过了 for (;;) {} 及 但是当我运行编译后的程序时,函数只运行一次 对不起,这是全部功能 #define WINDOWS_LEAN_AND_MEAN #define _WIN32_WINNT 0x0500 #include <windows.h> #include <iostream> // do something after 10 minutes of user inactivity static const

我需要一个每秒重复一次的函数。我两个都试过了

for (;;) {}

但是当我运行编译后的程序时,函数只运行一次

对不起,这是全部功能

#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);
    }
}
#定义WINDOWS_LEAN_和_MEAN
#定义_WIN32_WINNT 0x0500
#包括
#包括
//在用户不活动10分钟后执行某些操作
静态常量unsigned int idle_毫秒=60*10*1000;
//在两次跑步之间至少等待一小时
静态常量无符号整数间隔=60*60*1000;
int main(){
LASTINPUTINFO last_输入;
BOOL屏幕保护程序处于活动状态;
//检查用户空闲时间是否足够长的主循环
对于(;;){
如果(!GetLastInputInfo(&last_input)
||!SystemParametersInfo(SPI_GetScreenSave活动,0,
&屏幕保护程序(活动,0))
{
标准:cerr
应该可以工作,但通常你应该避免无限循环,而不是像这样做

bool isRunning = true;
while( isRunning ){
  //Do something
}
通过这种方式,您将能够在需要时终止循环

应该可以工作,但通常你应该避免无限循环,而不是像这样做

bool isRunning = true;
while( isRunning ){
  //Do something
}
这样,您就可以在需要时终止循环。

for(;;)和while(1)这两个循环都用于无限循环。您的程序是这样的:

for (;;) // or while(1), doesn't matter
{
    function();
    sleep(1000);
}
如果这对您不起作用,您将不得不提供更多的代码,因为我看不出它不起作用的其他原因

哦,我必须说,sleep()函数在不同平台上的实现方式不同。您必须在工具箱中找到该值的单位是秒还是毫秒(如果sleep(1000)不起作用,请尝试sleep(1))。

两个循环,for(;;;)和while(1)都用于无限循环。您的程序如下所示:

for (;;) // or while(1), doesn't matter
{
    function();
    sleep(1000);
}
如果这对您不起作用,您将不得不提供更多的代码,因为我看不出它不起作用的其他原因


哦,我必须说,sleep()函数在不同平台上的实现是不同的。您必须在工具箱中找到该值的单位是秒还是毫秒(如果sleep(1000)不起作用,请尝试sleep(1)).

您可以使用计时器,并将间隔设置为1秒,这将每秒触发并执行所需操作。

您可以使用计时器,并将间隔设置为1秒,这将每秒触发并执行所需操作。

请显示完整的代码。这两个示例是不执行任何操作的无限循环。它运行一次并输出堆栈Overflow错误?或者内存不足错误?顺便问一句,为什么它适用于Windows?在所有系统上都是一样的。我怀疑它可能会进入“睡眠(间隔)”,您应该尝试调试并查看失败的部分。请显示完整的代码。这两个示例是不起任何作用的无限循环。它运行一次并输出堆栈溢出错误?或内存不足错误?顺便问一下,为什么它适用于Windows?在所有系统上都是相同的。我怀疑它可能会进入“睡眠(间隔)”,你应该试着调试一下,看看什么失败了。这很奇怪,但@Dimme也提出了类似的建议(对于许多这样的需求来说,这是一个合理的解决方案),并因未知原因两次被否决。@OliCharlesworth-是的,我最初看到了令人反感的宏,但在我的脑海中评论说它与OP问题无关:)这很奇怪,但@Dimme提出了大致相同的建议,(对于许多这样的要求来说,这是一个合理的解决方案),并且因为未知的原因两次被否决。@OliCharlesworth-是的,我最初看到了令人反感的宏,但在我的脑海中评论说它与OP问题无关:)