如何循环程序,使其继续执行

How to loop program so it continues execution

本文关键字:继续 执行 程序 何循环 循环      更新时间:2023-10-16

我现在有这个代码

#include <iostream>
#include <curl.h>
#include <windows.h>
#include "boosttimer.hpp"

int main(void)
{
    CURL *curl;
    CURLcode res;
    boost::timer t;
    int number = 1;
    while (number == 1)
    {
         if(t.elapsed() > 10)
         {
            curl = curl_easy_init();
            if(curl) 
            {
                curl_easy_setopt(curl, CURLOPT_URL, "http://google.com");
                res = curl_easy_perform(curl);
                /* always cleanup */ 
                curl_easy_cleanup(curl);
            } 
            t.restart();
         }
      }
}

我想让它继续执行这个程序,直到有人关闭窗口。我尝试了前面提到的代码,但是CPU使用率在我的四核CPU上飙升到了25%。

那么我如何继续执行程序并在while内循环代码而不使用那么多CPU?

p。年代四核25%意味着单核cpu 100%的cpu使用率

您可以使用Sleep(10000)暂停程序执行大约。10秒。您可以放弃boost::timer -在每个循环迭代中只休眠10秒(休眠不那么精确,但对于10秒的不准确性应该可以忽略不计)。

你的代码就是所谓的"繁忙循环"——对于CPU来说,你是在一个没有太多工作的紧循环中徘徊还是做大量的计算都没有区别。两者都将使用100%的CPU核心,因为有一个永无止境的指令流进入。要减少使用,您需要暂时放弃执行,让操作系统执行其他进程。

您正在忙着等待。也就是说,即使您的程序不需要做任何事情,它仍然保持循环旋转,等待计时器。你需要做的是执行一个真正的睡眠,这告诉你的操作系统在接下来的10秒内进程不需要做任何事情。

在boost中实现真正睡眠的一种方法是boost::this_thread::sleep函数

如果需要用一些sleep()减慢速度。基本上,您需要将线程置于睡眠状态,以允许其他进程执行。

您所实现的称为忙等待,被认为是非常糟糕的风格。使用sleep暂时挂起程序执行,并编写一个永久循环,如下:

for (;;)

while (true)

看起来你想在每次操作后做一个睡眠

您可以boost::threads在它自己的线程中运行它,然后做一个线程。加入主线程等待它。如果另一个线程因为while(true)而没有结束,那么你的程序将一直运行,直到你关闭窗口。

while循环中调用SwitchToThread()。(Sleep不太理想,因为即使没有其他线程需要它,它也会丧失当前的时间片。)

考虑使用计时器来代替这种紧密的循环。或者你可以在两者之间设置System.Threading.Thread.Sleep(300)。

必须有人杀死你的进程才能关闭它,我在你的代码中看不到任何窗口。

如果你正在投票一个网站(它看起来像你正在做的事情与谷歌那里),那么我会建议你做一个更大的间隔!没有多少网站管理员会乐意看到这样的活动。它更有可能被视为dos攻击!

无论如何,如果有窗口,不如将此代码放在计时器委托中,否则启动计时器并允许用户以某种方式退出程序(可能使用Console.ReadKey()或其他)