确保两个线程同时启动

时间:2016-08-25 17:09:44

标签: java c++ multithreading

我有一个用Java和C ++编写代码的应用程序。 在这个应用程序中,我需要进行多次"试验"这持续N秒(让我们说N = 15)。 我还需要每隔0.005秒记录一次当前状态。 出于这个目的,我有以下代码:

std::thread timerTrial(&endTrial,this);
std::thread timerLog(&log,this);
std::thread timerTrial(&endTrial,this);
timerLog.detach();
timerTrial.detach();

void endTrial(){
    usleep(TIME);
    isOver = true ;
    //...
}

void log(){
    while(isOver == false){
        usleep(TIMELOG);
        //Do the logging
    }
}

事情就是当我查看我的日志记录(然后写入文件)时,我看到我得到了不同数量的日志记录行(这意味着一个例子的日志记录到14.5秒,例如另一个14.3和另一个14.8)。有没有办法改进这个代码,以便减少每个试验之间的差异。

我认为我必须在log()中执行的日志记录可能会导致一个小的延迟,但老实说,这是一个非常小的日志记录(主要是将内容添加到std :: vector中)。 我是否应该创建另一个并行线程来执行此日志记录,以免在while函数的log()循环中浪费时间?

我缺乏改进此代码的想法,以减少每个试验之间的差异。我希望我的问题很清楚。如果没有随意发表评论请求进一步解释。

提前致谢,

1 个答案:

答案 0 :(得分:0)

事实证明,我找到了一种可行的解决方法,而且不会降低UI的速度。 我只是将这两个线程组合在一个带有for循环

的线程中

最终代码看起来像这样。

std::thread timerTrial(&endTrial,this);
//....
void endTrial(){
    int nbOfLogsNeeded = //Compute how many logs I will need during the time of trial
    for(int i = 0 ; i < nbOfLogsNeeded ; i++){
        std::this_thread::sleep_until(std::chrono::system_clock::now() + std::chrono::milliseconds(50));
        //Perform Logging
    }
}

它并没有完全回答这个问题,但解决方法对我来说很合适。