2009-12-21 18 views
9

Bir küresel iş parçacığı tarafından tahrik edilen bir küresel io_service sağlamak istiyoruz. Yeterince basit, sadece io_service::run() numaralı iplik gövdesini aradım. yapmak için hiçbir çalışma varsa Ancak, bu run (run_one, poll, poll_one) dönüş olarak çalışmaz. Ancak, eğer iş parçacığı tekrar tekrar çalıştırırsa(), yapacak bir şey olmadığında döngü meşgul olur.adanmış iplik :: çalıştırın()

ben io_service yapılması gereken herhangi bir iş yoktur iken engellemek için iplik almak için bir yol arıyorum. İş parçacığı üzerinde durması için karışıma genel bir olay ekleyebilirim. Ancak, bu, io_service kullanıcılarının, hizmeti her kullandıklarında bildirimde bulunmasını gerektirir. İdeal çözüm değil.

Not: hiçbir gerçek globaller vardır ve ben sadece benim tam ihtiyaca aşağı sorunu basitleştirilmiş eşzamanlılık olayları hiç kullanmıyorum. Gerçek amaç, bir io_service yapım parametresi gerektirmeyen bir asio::deadline_timer alt sınıftır.

cevap

21

Bir io_service::work nesne oluşturmak gerekir.

Stopping the io_service from running out of work

+0

hakkında bu bir bilmiyordum:

belgelerin bu bölümüne bakın. +1 ve hack-ishy öneri silindi. –

+0

teşekkürler, sadece bu amaç için zamanlayıcı ve sonsuz zaman aşımı yapmaya başlamıştım. Asio ile sürekli etkilendim. Çok az köşe vakasını kaçırdılar. –