Windows Mobile / C: дождитесь изменения переменных - PullRequest
1 голос
/ 14 сентября 2009

В настоящее время я пишу библиотеку-оболочку для Windows Mobile на C / 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)
{
   /* My code goes here */
}

К сожалению, я должен реализовать описанные выше функции, поэтому я планировал решить это следующим образом:

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;
}

Я понятия не имею, как это сделать в Windows / C, и я был бы очень рад, если бы кто-то мог мне помочь или сказать, какие функции я должен использовать для достижения этой цели.

Ответы [ 2 ]

3 голосов
/ 14 сентября 2009

Вы можете использовать Windows Функции синхронизации .

В общем, все, что вам нужно сделать, это:
* CreateEvent - создать событие
* WaitForSingleObject - дождаться, пока это событие станет сигнальным
* SetEvent - сигнализировать о событии

0 голосов
/ 14 сентября 2009

Как-то так, я ожидаю:

//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;
}

Вы должны выяснить, выполняется ли обратный вызов в другом потоке или асинхронно выполняется в том же потоке, или библиотека нуждается в каких-либо других средствах для запуска обратного вызова.

...