我有一个使用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()
函数的循环中浪费时间?
我缺乏改进该代码的想法,以减少每次试用之间的差异。我希望我的问题足够清楚。如果不能随意发表评论,请要求进一步的解释。
提前致谢,
事实证明,我发现了一种可行的解决方法,并且不会降低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
}
}
它不能完全回答问题,但是解决方法对我来说很好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句