나는 부스트에서 동기화가 어떻게 작동하는지 연구 해왔다. 그러나 나는 아직도 내 문제를 해결하는 데 필요한 것이 무엇인지 혼란스러워한다. 필자는 응용 프로그램의 내 Augmented Reality 구성 요소에 대한 주요 스레드와 필요한 위치를 획득하는 작업 공간 교정을위한 두 번째 스레드를 가지고 있습니다. 위치 인수 때 HapticDevice 클래스 내부 초기화부스트 스레드 공유 벡터
#include <boost/thread.hpp>
/* Holds data retrieved from HDAPI. */
struct DeviceData {
hduVector3Dd m_devicePosition; // Current device coordinates
hduMatrix m_transform; // Current device transform matrix
};
class HapticDevice {
public:
HapticDevice();
std::vector<DeviceData> hdData;
HDSchedulerHandle hPositionCycle;
HHD hHD;
bool thread_running;
boost::thread haptic_thread;
void startThread();
void threadPosAcquisition();
void haptic_cleanup(HDSchedulerHandle hPositionCycle, HHD hHD);
};
그리고 스레드 : 제 2 스레드가 교정이 필요한 경우에만 현재 시작되고있는 유일한 hdData 아래에 표시되는 벡터에 서면으로 하나가 될 것입니다
필수 :
HDCallbackCode HDCALLBACK positionAcquisitionCallback(void *pUserData);
HapticDevice::HapticDevice() {
thread_running = false;
}
void HapticDevice::startThread() {
thread_running = true;
haptic_thread = boost::thread(boost::bind(&HapticDevice::threadPosAcquisition, this));
}
void HapticDevice::threadPosAcquisition() {
HapticDevice *hdev = (HapticDevice *) pUserData;
//acquires position per click made by user
//...
}
필기 도구 (위치를 클릭하면, 획득 및 벡터 내로 밀려 PER)는 사용자에 의해 제어되지만, 판독 메인 쓰레드에 의해 제어된다. 두 스레드간에 벡터를 공유 할 수 있기를 원하지만 어떻게 방법을 찾지 못했습니다. 뮤텍스는 어디에 두어야합니까?
비슷한 질문을 통해 boost :: ref를 통해 클래스를 전달했지만 클래스의 메서드를 사용하여 스레드를 시작 했으므로 변경해야 할 경우 더 혼란 스럽습니다. 나는 단순히 그렇게
HapticDevice haptic_device;
처럼 내 MAIN.CPP에 햅틱 장치 개체를 정의하고 스레드를 시작하면 내 코드 여부를 ...
, 어떻게 2 스레드를 만드는 것을 변경에 액세스 할 ? 나는 현재 얼마나 많은 감각을 갖고 있는지 잘 모르겠다.
고마워요! 나는 너의 제안을 따를 것이다. – Ada