【发布时间】:2017-05-08 09:38:52
【问题描述】:
作为大学项目的一部分,我目前正在为大脑的视觉皮层开发一种刺激提供器。该程序将(最好)用 c++ 编写,利用 Visual Studio 和 OpenCV。它应该工作的方式是程序根据不同频率的数量创建许多线程,每个线程都为其各自的频率运行一个计时器。 到目前为止,代码看起来像这样:
void timerThread(void *param) {
t *args = (t*)param;
int id = args->data1;
float freq = args->data2;
unsigned long period = round((double)1000 / (double)freq)-1;
while (true) {
Sleep(period);
show[id] = 1;
Sleep(period);
show[id] = 0;
}
}
对于某些频率,它似乎可以正常工作,但其他频率的帧速率变化很大。我试图研究创建自己的计时功能,类似于在 Arduino 的“blinkWithoutDelay”功能中所做的,尽管效果非常糟糕。另外,我尝试过使用 waitKey() 函数,它的工作原理与现在使用的 Sleep() 函数非常相似。
任何帮助将不胜感激!
【问题讨论】:
-
你提供的代码不足以描述问题:这个
show[id]是干什么用的? -
这适用于哪些频率,哪些频率有问题?你的好帧率和坏帧率是多少?
show是什么类型的? -
(double)1000 / (double)freq==>1000.0 / freq
标签: c++ visual-studio opencv timing time-critical