Windows Mobile / C: Espere até que as mudanças de variáveis
-
07-07-2019 - |
Pergunta
Atualmente estou escrevendo uma biblioteca wrapper para Windows Mobile em C / C ++. Eu tenho que implementar e exportar as seguintes funções:
void start_scanning();
int wait_for_scanning_result();
void stop_scanning();
start_scanning()
é chamado para iniciar o processo de digitalização. wait_for_scanning_result()
irá esperar até que o resultado está disponível e devolvê-lo, e stop_scanning
irá abortar o processo.
A biblioteca que estou usando tem uma função de retorno de chamada que é executado quando o resultado está disponível.
void on_scanning_result(int result)
{
/* My code goes here */
}
Infelizmente eu tenho que implementar as funções acima, assim que meu plano era para resolvê-lo como este:
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;
}
Eu não tenho nenhuma idéia de como fazer isso no Windows / C e eu ficaria muito feliz se alguém poderia me ajudar ou me dizer que funciona eu tenho que usar para conseguir isso.
Solução
Você pode usar janelas funções de sincronização .
Basicamente tudo que você tem a fazer é:
CreateEvent - criar um evento
WaitForSingleObject - espera para este evento para se tornar sinalizado
SetEvent - sinalizar o evento
Outras dicas
Algo como isso, espero que:
//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;
}
Você deve descobrir se o callback é executado em outro segmento, ou executado de forma assíncrona no mesmo segmento, ou se a biblioteca precisa de alguns outros meios para permitir o retorno de chamada para ser executado.