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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top