2011-09-12 14 views
5

Attualmente sto giocando con la libreria Asynchronous Agents in Microsoft Concurrency Runtime. Non ho ancora trovato un modo ovvio per segnalare che un'attività è terminata utilizzando i messaggi della finestra, o qualche altro mezzo per notificare al thread dell'interfaccia utente che il lavoro è finito.Agenti asincroni e messaggi finestra

So che posso passare le maniglie delle finestre ei valori dei messaggi (WM_xxx) insieme alle attività e che l'attività utilizza PostMessage() per segnalare il thread dell'interfaccia utente. Questo è un po 'brutto secondo me e una fonte di errore. Se si verifica un'eccezione, devo avere un gestore catch che segnali il mio thread dell'interfaccia utente. Questo è facilmente dimenticato e la condizione di eccezione potrebbe non essere eseguita molto spesso, quindi è difficile individuarla.

La documentazione parla di come spostare i dati sul thread dell'interfaccia utente. Non fa uso di messaggi finestra, ma tecniche di polling. Trovo sciocco impostare timer per eseguire il polling se un'attività è terminata, quando ci sono metodi "interrupt" disponibili!

È strano che questo non sia incorporato nella libreria, in quanto non è una libreria multipiattaforma. È progettato per funzionare su Windows e solo su Windows, da quello che ho capito.

La funzionalità è disponibile nella libreria o devo consegnarla manualmente?

risposta

1

È possibile creare un thread di monitoraggio con la sola funzione di monitoraggio di unbounded_buffer per un messaggio di Windows e invio di tale messaggio in modo appropriato. Chiedete ai vostri agenti di sapere su questo buffer.

Problemi correlati