【发布时间】:2012-08-17 14:44:01
【问题描述】:
我需要从一个事件开始循环,然后从另一个事件停止它。 我的想法是当我按下按钮时调用函数 startDequeuing(),以便启动一个带有循环的线程,然后终止这个循环,将函数 stopDequeuing() 中的“出队”变量设置为 false。
这是我第一次使用线程,当我开始循环时程序会锁定,我认为是因为变量“出队”被锁定并且无法从线程外部访问,对吗?
我该如何解决这个问题??
这里有一些代码:
void CameraManager::startDequeuing(){
dequeuing = true;
std::thread dequeueThread(&CameraManager::dequeueLoop, this);
dequeueThread.join();
}
void CameraManager::stopDequeuing(){
dequeuing = false;
}
void *CameraManager::dequeueLoop(){
while(dequeuing){
highSpeedCamera->dequeue();
highSpeedCamera->enqueue();
}
}
【问题讨论】:
-
不,请不要使用 volatile,当它涉及到多线程时。它可能有效,但在正确编写的多线程应用程序中永远不需要它。这里的问题很可能是 stopDequeuing() 永远不会被调用,因为 startDequeing() 在 join() 上阻塞。
标签: c++ multithreading loops c++11 stdthread