C++ 如何在给定openmp线程完成时退出程序
我有一些记录软件,我已经写了从多点灰色相机,GPS和Phidget传感器捕捉图像 我使用OpenMP将不同的任务卸载到不同的线程。它们如下所示C++ 如何在给定openmp线程完成时退出程序,c++,multithreading,openmp,C++,Multithreading,Openmp,我有一些记录软件,我已经写了从多点灰色相机,GPS和Phidget传感器捕捉图像 我使用OpenMP将不同的任务卸载到不同的线程。它们如下所示 线程3-更新GPS值(存储在结构中) 线程2-更新Phidget值(存储在结构中) 线程1-从GPS和Phidget结构获取图像和最新值 当程序运行时,它会显示图像、gps和加速计数据。我按了“L”键,数据记录工作正常 问题 我按下“x”键将grabimgs设置为false以退出线程1中的while循环。这将停止更新图像。我希望这也会更新其他线程中的
- 线程3-更新GPS值(存储在结构中)
- 线程2-更新Phidget值(存储在结构中)
- 线程1-从GPS和Phidget结构获取图像和最新值
int main() {
//connection flags
bool cameras_connected = false;
bool phidget_connected = false;
bool GPS_connected = false;
if (cap.ConnectCameras()) {
cout << "Connected to FireFly cameras" << endl;
cameras_connected = true;
}
if (GPS.isReady()) {
cout << "Connected to GPS" << endl;
GPS_connected = true;
}
if (Phid.connectPhidget()) {
cout << "Connected to Phidget" << endl;
phidget_connected = true;
}
bool grabimgs = true;
#pragma omp parallel sections shared(GPSData,PhidgetData,grabimgs,cameras_connected,phidget_connected,GPS_connected)
{
//---- THREAD 1 ----
// Camera Capture Thread
#pragma omp section
{
while(grabimgs) {
vector<cv::Mat> Images;
if(cap.GrabMats(Images)) {
//do imshow and logging bits
//GPS and Phidget data is written and displayed from here
char key = cv::waitKey(1000/30);
if (key=='x'){
grabimgs = false;
doLogging = false;
}
}
}
} //END OF THREAD 1
//---- THREAD 2 ----
//Phidget Capture Thread
#pragma omp section
{
if (phidget_connected) {
while(grabimgs) {
cout << "grabimgs in thread 2 = " << grabimgs << endl;
//get Phidget data
Phid.updateReadings(PhidgetData);
}
}
} //END OF THREAD 2
//---- THREAD 3 ----
//GPS Capture Thread
#pragma omp section
{
if(GPS_connected) {
while(grabimgs) {
cout << "grabimgs in thread 3 = " << grabimgs << endl;
//get GPS Data
GPS.update(GPSData,FORCE_UPDATE);
}
}
} //END OF THREAD 3
}// end of OMP
return 1;
intmain(){
//连接标志
bool摄像头连接=错误;
bool-phidget_-connected=false;
bool GPS_connected=错误;
如果(第1章连接摄像头()){
cout您应该flush
将变量与其他线程同步:flush(grabimgs)
另请参见可能的副本“是”,同意。很抱歉,我以前没有找到!