Ich möchte eine globale io_service
, die von einem globalen Thread angetrieben wird. Einfach genug, ich habe nur den Thread-Body-Aufruf io_service::run()
. Dies funktioniert jedoch nicht, da run
(run_one
, poll
, poll_one
) zurückkehren, wenn keine Arbeit zu tun ist. Wenn der Thread jedoch wiederholt run() aufruft, wird eine Besetztschleife ausgeführt, wenn nichts zu tun ist.dedizierten Thread für io_service :: run()
Ich bin auf der Suche nach einer Möglichkeit, den Thread zu blockieren, während es keine Arbeit in der io_service zu tun gibt. Ich könnte dem Mix ein globales Ereignis hinzufügen, damit der Thread blockiert wird. Dies würde jedoch erfordern, dass Benutzer von io_service
das Ereignis jedes Mal benachrichtigen, wenn sie den Dienst nutzen. Nicht die ideale Lösung.
Hinweis: Es gibt keine tatsächlichen Globals und ich verwende nie Ereignisse für Parallelität Ich habe das Problem nur auf meinen genauen Bedarf vereinfacht. Das eigentliche Ziel ist eine asio::deadline_timer
Unterklasse, die keinen io_service
als Konstruktionsparameter erfordert.
nicht über diese ein nicht kannte. +1, und löschte meinen hack-ishy Vorschlag. –
danke, ich hatte begonnen, Timer mit und unendlich Timeout nur für diesen Zweck zu machen. Ich bin ständig beeindruckt von Asio. Sie haben sehr wenige Eckfälle vermisst. –