2017-04-26 1 views
0

비디오 카메라 장치와 통신하는 API를 사용하고 있습니다. 내 목표는 장치로 스냅 샷을 찍는 것입니다.C++의 콜백 함수에서 스레드 종료하기

API는 콜백과 함께 작동합니다. 콜백 함수를 원하는 기능에 연결합니다. 이 경우 스냅 샷을 찍습니다.

같이 보일 그렇게하는 기능 ...

MEDIALIB_SETSNAPCB(this, snapcb); // connect snapshot callback to callback function snapcb 
MEDIALIB_TAKESNAP(device_nr, channel); // take snapshot of specified channel 

문제는 내가 프로그램을 종료하기 전에 응답 콜백 함수 snapcb 기다릴 필요가있다. snapcbMEDIALIB_TAKESNAP을 실행 한 후 응답하는 데 최대 50 초가 걸릴 수 있습니다.이 경우 콜백이 완료 될 때까지 기다리지 않고 다음 줄로 이동합니다. 여기

는 버전을 박탈이다 : 나는 스레드에서 MEDIALIB_TAKESNAP(device_nr, channel);를 실행 한 후 때 콜백 반품 조건 변수를 발사의 생각

... 
int Snapshot::takeSnap() 
{ 
    MEDIALIB_SETSNAPCB(this, snapcb); // connect snapshot callback to callback function snapcb 

    CString device_nr = "TC1234"; 
    int channel = 1; 
    MEDIALIB_TAKESNAP(device_nr, channel); // take snapshot of specified channel 
    return 0; 
} 

void Snapshot::snapcb(const char* device_nr, int channel, const char* pBuf, int nLen, void* pUsr) 
{ 
    Snapshot* pThis = (Snapshot*)pUsr; 
    pThis->snapdatacb(device_nr, channel, pBuf, nLen); 
} 

void Snapshot::snapdatacb(const char* device_nr, int channel, const char* pBuf, int nLen) 
{ 
    // ... create file on computer ... 
} 
... 

하지만, 방법의 예를 찾을 수 없었습니다 이 상황에서 조건부 변수를 사용하십시오.

도움을 주시면 감사하겠습니다. 또한 stackoverflow에 대한 질문을하는 법을 배우면서 질문을 구성하는 방법에 대해 의견을 말하십시오.

+0

당신은 https://stackoverflow.com/documentation/c%2b%2b/699/threading/13552/using-condition-variables#t=201704260920460644225을 확인 할 수 있습니다 – JVApen

답변