2009-12-21 13 views
9

Desidero fornire un valore globale io_service guidato da un thread globale. Abbastanza semplice, ho appena chiamato il thread body io_service::run(). Tuttavia, ciò non funziona come run (, poll, poll_one) restituire se non c'è lavoro da fare. Ma, se il thread chiama ripetutamente run(), verrà occupato quando non c'è nulla da fare.thread dedicato per io_service :: run()

Sto cercando un modo per bloccare il thread mentre non c'è lavoro da fare nel io_service. Potrei aggiungere un evento globale al mix per il thread da bloccare. Tuttavia, ciò richiederebbe agli utenti di io_service di notificare l'evento ogni volta che utilizzavano il servizio. Non la soluzione ideale.

Nota: non ci sono globali effettivi e non uso mai eventi per la concorrenza ho semplicemente semplificato il problema fino alla mia esatta esigenza. Il vero obiettivo è una sottoclasse asio::deadline_timer che non richiede uno io_service come parametro di costruzione.

risposta

21

È necessario creare un oggetto io_service::work.

Vai a questa sezione della documentazione:

Stopping the io_service from running out of work

+0

non sapeva di questo. +1, e cancellato il mio suggerimento hack-ishy. –

+0

grazie, avevo iniziato a fare il timer con e il timeout infinito solo per questo scopo. Sono perennemente impressionato da asio. Hanno perso pochissimi casi d'angolo. –

Problemi correlati