원래 Java에서 왔기 때문에 C++ 11에서 두 스레드 간의 데이터 공유에 문제가 있습니다. 나는 철저히 여기에 도움없이 멀티 쓰레드 게시물을 읽었고, 나는 왜 내 접근 방식이 멀티 스레딩을위한 OK C++ 구문이 아닌지 알고 싶습니다. 짧은스레드 간 C++ 데이터 공유 C++
내 응용 프로그램 :
내가 하나 개의 스레드 하드웨어 센서를 읽고 일부 공유 데이터에 대한 데이터를 모니터링하는 것이 투기가
내가 바로 그 모니터의 데이터 변경 사항을 듣고 다른 스레드를 원하는 및
다음
내 Main 클래스의 지혜입니다 (예, 나는 내 모니터의 조건 varible을 사용하고 있습니다) 새로운 데이터를 기반으로 일부 그래픽 물건을 그립니다 H 주요 방법은
#include <cstdlib>
#include <iostream>
#include <thread>
#include <sweep/sweep.hpp>
#include <pcl/ModelCoefficients.h>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/filters/extract_indices.h>
#include <pcl/features/normal_3d.h>
#include "include/LiDAR.h"
#include "include/Visualizer.h"
void run_LiDAR(LiDAR* lidar){
lidar->run();
}
void visualize(Visualizer* visualizer){
visualizer->run();
}
int main(int argc, char* argv[]) try {
Monitor mon; //The monitor holding shared data
LiDAR sensor(&mon); //Sensor object dumping data to the monitor
Visualizer vis(&mon); //Visualizer listening to data changes and updates the visuals accordingly
std::thread sweep_thread(run_LiDAR, &sensor); //Starting the LiDAR thread
std::cout << "Started Sweep thread" << std::endl;
std::thread visualizer_thread(visualize, vis);
std::cout << "Started Visualizer thread" << std::endl;
while(1){
//Do some calculations on the data in Monitor mon
mon.cluster();
}
}
데이터 덤프 센서 스레드 선행 등 클러스터링 알고리즘을 실행하는 메인 쓰레드을한다.
내 프로그램 빌드 및 작동std::thread visualizer_thread(visualize, vis);
...
나는 무엇을 얻고 있지 않다 : 나는 라인을 코멘트 경우
In file included from MY_DIRECTORY/Main.cpp:3: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:336:5: error: attempt to use a deleted function
__invoke(_VSTD::move(_VSTD::get<1>(__t)), _VSTD::move(_VSTD::get<_Indices>(__t))...);
: 나는 다음과 같은 오류 메시지가 그러나? 무슨 일이 일어나고 무엇
종류와 관련,
코드를 컴파일 할 수 없으면 말할 수 없지만 'vis'는 복사 할 수 없습니다. – nwp
'& vis'을 (를) 사용하셨습니까? – doctorlove
@doctorlove'& vis'를 사용하는 것은 다소 위험합니다. 쓰레드가 완료되고 경주 조건에주의 할 때까지'vis'가 살아 있는지 확인해야합니다. 이 문제를 피하기 위해서'std :: thread'는 처음부터 복사를합니다. – nwp