我有一个用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()
循环中浪费时间?
我缺乏改进此代码的想法,以减少每个试验之间的差异。我希望我的问题很清楚。如果没有随意发表评论请求进一步解释。
提前致谢,
答案 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
}
}
它并没有完全回答这个问题,但解决方法对我来说很合适。