Uzaktaki bir makineden ileti alacak ve iletileri diskteki bir dosyaya yazması gereken bir program oluşturuyorum. Bulduğum zorluk, bu programın amacının mesajların alındığı kütüphanenin performansını test etmek olduğu ve bu nedenle mesajların diske yazılmasının kütüphanenin performansını etkilemediğinden emin olmam gerektiğidir. . Kütüphane, mesajları bir geri çağırma işleviyle programa iletir. Diğer bir zorluk ise çözümün platformdan bağımsız olması gerektiğidir.Platform bağımsız asenkron yazım nasıl yapılır?
Hangi seçeneklerim var?
benim aklıma şu: boost:asio
kullanarak
- dosyaya yazmak için, ancak dosyaya uyumsuz yazma bu kütüphanenin, Windows belirli bir bölgesinde olduğu (this belgelerine bakın) görünüyor - bu yüzden bu olamaz Kullanılmış.
- Bir ileti sırası oluşturmak için
boost::interprocess
'u kullanmak ancak this documentation, iletilerin gönderilebileceği 3 yöntemin bulunduğunu ve tüm yöntemlerin program kuyruğu doluysa (örtülü veya değil) programın engellenmesini gerektirdiğini belirtir; risk. std::deque<MESSAGES>
geri çağırma işlevinden deque öğesine basıp, dosyaya (ayrı bir iş parçacığında) yazarken iletileri dışarı çıkartır, ancak STL kapsayıcıları not guaranteed to be thread-safe'dir. İğneyi devirip kilitleyebilirim, ama dehşete kapılıyorum ama birbirini takip eden mesajlar arasında 47 mikro saniyeden bahsediyoruz, böylece kilitleri tamamen önlemek istiyorum.
Olası çözümler hakkında başka fikri olan var mı?
Hangi mesajlar arasında 47 mikrogram var? Uzak makine kadansı mı? –