在命令行应用程序中,我希望建立两个"进程"在同一时间运行。通过流程,我的意思是:
每57秒,我想做任务A,每250秒执行一次任务B.这些是任意选择的数字,但你明白了。
我如何同时拥有这两个"流程"同时检查?
谢谢你们
答案 0 :(得分:2)
如果这两个过程都不需要很长时间,你可以这样做。
float Atime = 57.f;
float Btime = 250.f;
float startTime = someTimerFunc();
while(true) {
sleep(a few milliseconds);
float endTime = someTimerFunc();
float deltaTime = endTime - startTime;
startTime = endTime;
Atime -= deltaTime;
Btime -= deltaTime;
if(Atime < 0) {
Atime += 57.f;
AProcess();
}
if(Btime < 0) {
Btime += 250.f;
BProcess();
}
}
或者你可以查找线程的内容。
答案 1 :(得分:2)
运行2个线程将是处理此问题的好方法,除非您有理由需要不同的进程。像这样:
void taskA() { /*...*/ }
void taskB() { /*...*/ }
/*...*/
bool exit = false;
std::mutex mutex;
std::condition_variable cv;
auto runLoop = [&](auto duration, auto task)
{
std::unique_lock<std::mutex> lock{mutex};
while(true)
{
if(!cv.wait_for(lock, duration, [&]{ return !exit; }))
task();
else
return;
}
};
std::thread a{ [&]{ runLoop(std::chrono::seconds{57}, taskA); }};
std::thread b{ [&]{ runLoop(std::chrono::seconds{250}, taskB); }};
这样做是跨平台标准C ++,这是一个主要的好处。它使用C ++ 11:lambdas和线程库。
答案 2 :(得分:1)