作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我这里有这个用 g++ theFile.cc -lboost_thread 编译的测试用例。运行程序时,它似乎卡在 join 命令处。我不确定为什么。这就像 interrupt_point() 函数没有从主线程获取加入请求。
#include <iostream>
#include <stdio.h>
#include <signal.h>
#include <fstream>
#include <boost/thread.hpp>
using namespace std;
//////////////////////////////////
class SerialnIMU {
public:
~SerialnIMU();
void start();
void stop();
private:
boost::thread readThread;
class SerialReader {
public:
void operator()();
private:
};
};
////////////////////////////////
SerialnIMU::~SerialnIMU() {
stop();
}
void SerialnIMU::start() {
readThread = boost::thread(SerialReader());
cout<<"Created: "<<readThread.get_id()<<endl;
}
void SerialnIMU::stop() {
cout<<"Join: "<<readThread.get_id()<<endl;
cout<<"Joining serial thread..."<<endl;
readThread.join();
cout<<"Done."<<endl;
}
//////////////////////serial thread//////////////////
void SerialnIMU::SerialReader::operator()() {
cout<<"Serial reading thread started..."<<endl;
try {
while(true) {
boost::this_thread::interruption_point();
}
} catch(...) {
cout<<"exception was thrown."<<endl;
}
cout<<"Serial reading thread stopped."<<endl;
}
int main(int argc, char **argv) {
SerialnIMU imu;
imu.start();
imu.stop();
return 0;
}
感谢阅读。
编辑:此外,如果您删除 while 循环,程序会干净地退出...提升版本 1.39.0
最佳答案
看来您的停止函数实际上并没有中断线程。调用 join 并不意味着中断,相反,如果您希望中断而不是等待正常终止,则必须在加入之前通过调用 .interrupt() 明确地执行此操作。
关于join - 提升线程并加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1960403/
我是一名优秀的程序员,十分优秀!