2009-09-14 4 views
1

현재 C/C++에서 Windows Mobile 용 래퍼 라이브러리를 작성하고 있습니다. 나는 다음과 같은 기능을 구현하고 내보낼 수 있습니다 스캔 과정을 시작하기 위해 호출됩니다Windows Mobile/C : 변수가 변경 될 때까지 대기

void start_scanning(); 
int wait_for_scanning_result(); 
void stop_scanning(); 

start_scanning(). wait_for_scanning_result()은 결과를 사용할 수있을 때까지 기다렸다가이를 반환하고 stop_scanning은 프로세스를 중단합니다.

사용중인 라이브러리에는 결과를 사용할 수있을 때 실행되는 콜백 함수가 있습니다.

void on_scanning_result(int result) 
{ 
    scan_result_available = 1; 
    scan_result = result; 
} 

int wait_for_scanning_result() 
{ 
    /* ... wait until scan_result_available == 1 */ 
    return scan_result; 
} 

내가 어떻게 창에서이 작업을 수행하는 아무 생각이 없다/C와 나는 것 매우 : 내 계획은 다음과 같이 그것을 해결하는 것이었다 있도록

void on_scanning_result(int result) 
{ 
    /* My code goes here */ 
} 

불행하게도 나는, 위의 기능을 구현해야 기꺼이 누군가가 나를 도울 수 있거나 내가 이것을 달성하기 위해 사용해야하는 기능을 말해 주면. 이 같은

+1

를이 다 실행하는 건가요 - 쓰레기? 그렇다면 조건 변수 또는 이벤트 동기화 도구를 사용할 수 있습니다. – Dirk

+0

@Dirk : 단일 스레드 또는 다중 스레드로 실행되는지는 중요하지 않습니다. – xsl

답변

3

Synchronization Functions 창을 사용할 수 있습니다.

은 기본적으로 당신이 할 일은 다음과 같습니다
* CreateEvent - * SetEvent
을 신호되기 위해이 이벤트를 기다립니다 - -
* WaitForSingleObject 이벤트를 생성 신호를 발생

+1

+1. 이러한 기능은 이러한 목적을 위해 정확하게 존재합니다. 아쉽게도 Event 객체는 중량이있을 수 있습니다. 질문에 대해서는 연동 된 증가 및 감소 (wait())가 작업을 수행 할 수 있습니다 ... – SadSido

+0

SadSido가 올바른 방법이라고 말했지만 조금 무거울 수 있습니다 - windows의 중요 섹션 기능도 여기에서 사용할 수 있습니다. – Elemental

+0

이벤트는 Windows CE 1.0에서 지원되는 매우 기본적인 동기화 개체이며 매우 빠릅니다. 그렇지 않으면 증명할 수있는 벤치 마크는 무엇입니까? –

0

뭔가, 내가 기대 :

//declare as volatile to inform C that another thread 
//may change the value 
volatile int scan_result_available; 

int wait_for_scanning_result() 
{ 
    while(scan_result_available == 0) { 
     //do nothing 
    } 
    return scan_result; 
} 

콜백 다른 스레드에서 실행 또는 동일한 스레드에서 비동기 적으로 실행 또는 라이브러리가 콜백을 허용하는 다른 방법을 필요가 있는지 여부를 알아해야 달리기.

+0

내가 할 수있는 루프에서 기다리고있는 뭔가가 있습니까? 나는 세마포어 같은 것을 기대했다. – xsl

+0

예, 있습니다. 그러나 저는 Windows Mobile에 익숙하지 않습니다. – Artelius

+0

사실, 이것은 상당히 바보 같은 생각입니다. WM 플랫폼 용 멀티 코어 CPU를 인식하지 못하기 때문에이 루프가 실행되면 다른 코드가 실행되지 않으므로 scan_result_available이 변경되지 않습니다. (!) – MSalters

관련 문제