如何循环程序,使其继续执行
How to loop program so it continues execution
我现在有这个代码
#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()或其他)
- C++ 在信号处理程序后继续执行
- 超时后,线程睡眠不会继续执行
- 在构造函数中删除后继续执行
- c++:if 语句无法正常运行,并继续执行无效输出
- 英特尔 Pin:RECEIVED_ACCESS_FAULT异常后正确继续执行
- 如果发生错误,则返回错误值,否则,继续执行函数
- 睡眠线程或进程的指令是否在线程/进程休眠时继续执行?
- 使用 UWP 中的 IAsyncOperation 继续执行任务
- 是什么导致程序在我继续执行另一个功能之前停止
- 使用 ASSERT_DEATH 时,有没有办法在应用程序终止后自动继续执行所有测试
- 现代C++.从继续执行的工作线程返回数据结构
- 在击中断点并继续执行VS时,如何在运行时自动修改变量的值
- 在调用GNUPLOT之后,如何继续执行C 代码
- OpenMP 构造,在至少 1 个线程完成后立即继续执行
- 如果我已经完成了当前功能,我该如何选择继续执行另一个功能
- 循环浏览文件夹中的所有文件以继续执行脚本
- 在程序继续执行的同时,如何使代码的两部分之间存在时间间隔或延迟?C++
- C++if-else语句继续执行if,而不是else下的代码
- 继续执行另一个线程
- pthread_join()是否允许在调用线程上继续执行