2011-07-23 11 views
11

Yükseltme konusunda oldukça yeniyim :: asio, ancak birkaç yıldır var olan ve yoğun olarak kullanılan bir proje üzerinde çalışıyorum. Mevcut atamam, sistemin yaptığı çeşitli şeylerle ilgili periyodik metrikler eklemektir. Metriklerden biri, boost :: asio :: io_service çalışma kuyrukları ve zamanlayıcı kuyruklarının ne kadar derin bir çalışma süresine dönüştüğünü gözlemlemektir. Bu yüzden bir destek isteyebilirim: asio :: io_service nesnesi, kuyruğunda kaç şey var. Benim "XXXX()" ve "YYYY()" çağrıları ne denk işlevselliği almak için boost asio bir yolu var mıboost :: asio :: io_service zamanlayıcılar ve mesajlar için işgal edilen kuyruk uzunlukları

boost::asio::io_service asio_service; 

asio_service.post(boost::bind(do_work, "eat")); 
asio_service.post(boost::bind(do_work, "drink")); 
asio_service.post(boost::bind(do_work, "and be merry!")); 

std::cout << "There are " << asio_service.XXXX() 
      << "things in the post() queue and " 
      << asio_service.YYYY() << " timers" 

:

Ben soruyorum göstermek için

, aşağıdakileri dikkate ifade eden?

Asio zamanlayıcı sıra koduna baktım ve sıra sadece bir vektör ve bir liste olduğunu gördüm, ancak her ikisi de özel. Özel olduklarından, erişim elde etmek için miras kalmıyorum ve bu bir çift metrik için bir şeyler sarmak için bir tür tuhaf olmayan ziyaretçi kalıbı yazmak zorunda kalmak istemiyorum: bu sayımlara doğrudan erişim ideal; bana erişim vermek için uğraştığım destek özel sürümleri ideal olmazdı: Ben zaten mevcut olan bunu yapmak için bir yol arıyorum. Umarım bunu soran ilk kişi ben değilim.

cevap

5

Asio kütüphanesini doğrudan değiştirmeden io_service kuyruğu hakkında istatistik alamıyorsunuz. Belirttiğiniz gibi, konteyner özeldir. Performansın veya verimin tamamlama işleyicilerine bağlı olması nedeniyle, kuyruğun boyutu gerçekten de önemli değildir. Ne Benzer bir şey çözmek için geçmişte yaptık o soruya kesin bir cevap değil olmasına rağmen io_service

void 
Status::impl() 
{ 
    const boost::posix_time::ptime start = boost::posix_time::microsec_clock::local_time(); 
    _io_service.post(
     boost::bind(
      &Status::loadHandler, 
      this, 
      start 
     ) 
    ); 
} 

void 
Status::loadHandler(
    const boost::posix_time::ptime& start, 
    ) 
{ 
    // calculate duration spent in reactor queue 
    const boost::posix_time::ptime end = boost::posix_time::microsec_clock::local_time(); 
    const boost::posix_time::time_duration load = end - start; 
} 
+4

+ 1'e önemsiz bir işleyici göndermek için gerekli zamanı ölçmektir. Kuyrukları hakkında bilgi almak –

+1

hata ayıklama için yararlı olabilir Kuyruk uzunlukları, performans sorunları hata ayıklama için kesinlikle yararlıdır, ancak bu küçük kesmek de büyük bir yardımcıdır. – Anne

İlgili konular