在c++中启动、停止和重新启动线程时的问题
Problems while starting, stopping and restarting a thread in c ++
我刚刚开始处理不同的线程,现在正面临一个"无穷大"的问题。基本思想是为检测器读出启动一个线程,并停止它以进行校准。之后应该继续。
下面的代码是我试图做的一个最小的例子。Windows.h用于Sleep函数,可以被任何将示例延迟很短时间的东西交换。
// header for ThreadTest
#include <boost/thread.hpp>
#include <windows.h>
#include <iostream>
class ThreadTest;
void thread(ThreadTest* test);
class ThreadTest {
public:
bool _doWork;
void startTest(){
_doWork = true;
_test = boost::thread(thread,this);
}
void stopTest() {
_doWork = false;
_test.join();
};
private:
boost::thread _test;
};
void thread(ThreadTest* test) {
while (test->_doWork) {
std::cout << "Working..." << std::endl;
Sleep(2000);
}
}
int main(int argc, char* argv[])
{
ThreadTest test;
int a=0;
std::cout << "Start Test 1" << std::endl;
test.startTest();
std::cin >> a;
std::cout << "Stop Test 1" << std::endl;
test.stopTest();
std::cout << "Start Test 2" << std::endl;
test.startTest();
std::cin >> a;
std::cout << "Stop Test 2" << std::endl;
test.stopTest();
std::cout << "Start Test 3" << std::endl;
test.startTest();
std::cin >> a;
std::cout << "Stop Test 3" << std::endl;
test.stopTest();
return 0;
}
线程第一次运行,直到cin得到一些输入。然后,程序继续运行,而不必在第二个或第三个窗口等待。有人知道为什么会发生这种行为,或者我该如何预防吗?
提前感谢您的建议
你对std::cin
有什么样的输入?如果不是的话一个数字(int
),那么std::cin
将设置failbit
,等等进一步的输入将是无操作,立即返回。如果你只想等待用户做点什么,使用std::ignore( std::numeric_limits<streamsize>::max(), 'n' )
是好的解决方案;这将等待,直到用户输入一个新的线。
相关文章:
- 重新启动后,线程无法在 while 循环中再次运行
- 为什么 pthread_create() 返回 0 但线程从未启动
- C++挂起线程,然后通过其他线程重新激活
- 使用优化标志进行编译时线程不启动
- 如何重新启动崩溃的线程
- 标准C++11是否保证std::async(std::launch::asyncfunc)在单独的线程中启动func
- QT在背景线程上启动
- 启动多个线程并重新启动它们
- 如何使派生类函数作为线程的启动例程?
- (OpenMP)如何在一个线程中启动每个函数1次
- 从线程重新绘制初始屏幕/禁用断言
- C++线程库,在完成前两个线程后启动线程
- 正在等待C++11线程实际启动
- 即使使用另一个线程,启动while循环也会冻结程序
- 通过引用向量传递的线程函数启动缓慢
- 如何重新启动多线程c++程序里面的代码
- c++:如何定义类方法作为线程的启动例程(使用pthread库)
- 确保线程已启动winapi c++
- 确保两个线程同时启动
- 在派生的线程中启动进程