C ++同时运行两个“进程”

时间:2015-01-19 19:12:54

标签: c++

在命令行应用程序中,我希望建立两个"进程"在同一时间运行。通过流程,我的意思是:

每57秒,我想做任务A,每250秒执行一次任务B.这些是任意选择的数字,但你明白了。

我如何同时拥有这两个"流程"同时检查?

谢谢你们

3 个答案:

答案 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)

如上所述,您可以使用线程而不是进程。如果您使用的是c ++ 11,请查看here如何创建线程。

在链接示例中,只需将foo和bar替换为您希望任务A和任务B执行的代码。

另外,您可以查看here,了解如何让您的程序在睡眠中等待一段时间。