2016-03-24 24 views
4

I (görünüşte) rastgele hata alıyorum "Yetersiz sistem kaynakları istenen hizmeti tamamlamak için var".boost zaman uyumsuz okuma/yazma ile başarısız

boost::asio::serial_port mSerialPort; 

bu hatayı takiben, ben bile atma değil,

(belli değil henüz) bunlardan biri askıda kalıyor ve hiçbir döndürür
try 
{ 
    mSerialPort.cancel(); 
    mSerialPort.close(); 
} 
catch(boost::system::system_error error) 
{ 
    ; 
} 

deneyin:

seri port olarak ilan eden bir istisna.

Genel olarak, bu hata ne anlama geliyor?

Bu problemle karşılaştı mı? Özellikle herhangi bir yön soruşturmalı mıyım?


DÜZENLEME:

söz konusu seri port USB emülatörü kullanır.

Bu other SO Question ile ilgili olarak, özellikle Hans Passant'ın yorumu, bu hatanın cihaz sürücüsüne bağlı olması mümkün mü? Aynı kodu başka bir donanım bileşeni ile kullanıyorum ve bu davranışı hiç almadım.


DÜZENLEME 2:

bu özel hata iletisi için web üzerinde arama yaparken burada açıklandığı şekilde, genellikle disk belleği havuzu bellek artırmak için önerilir

:

Microsoft Support Article

Herhangi duygusu Benim durumumda bunu yaparken?

+0

Aktarmaya çalıştığınız verilerin boyutuyla hatanın görünüşü arasında bir ilişki kurmayı denediniz mi? –

+0

Verilerin boyutu her zaman aynıdır, küçük komutlar ve yanıtlar, boyut yaklaşık 4-10 karakterdir. – Smash

+0

Bu sorunla karşılaştığınızda hangi aygıt ve aygıt sürücüsünü kullanıyorsunuz? –

cevap

0

Windows üzerinde seri bağlantı noktalarıyla çalıştığımdan bu yana çok uzun zaman geçti, bu nedenle bu cevabı göz önünde bulundurun. Çok tarihsel olarak, NT 4.0 günlerinde, NT çekirdeği DDK yönergelerine yazılan çoğu seri bağlantı noktası sürücüsü düzgün bir şekilde eşzamansızlık yapamadı ve zaman zaman tam hata ile başarısız oldu ve/veya kilitlendi. Çözelti, yalnızca doğru şekilde çalışan seri i/o ile eşzamanlı i/o kullanmaktı. USB tabanlı seri bağlantı noktanızın sürücüsü orijinal olarak yeterince eskiyse, bu sorunu yineleyebilir.

Ayrıca, bilinen çalışma desenlerini aynı tasarım desenlerini kullandığınızdan emin olabilirsiniz. Örnek için http://www.ridgesolutions.ie/index.php/2012/12/13/boost-c-read-from-serial-port-with-timeout-example/'u deneyin. Umarım yardımcı olur.

0

Hata, genellikle ana belleğin maksimumu olduğu ve HDD dolu oluncaya kadar sistemin takas üzerinde bellek ayırdığı anlamına gelir. Programınızın ne kadar sürdüğüne bağlı olarak, bir bellek sızıntısı sonucu olabilir. Ancak, sizin durumunuzda sürücü seviyesinde bir şeyler oluyor. Olay görüntüleyiciyi, sadece orada bir şey rapor edilirse (pencereleri varsayarak) kontrol etmelisiniz.

Seri bağlantı noktasından herhangi bir şey alabildiniz mi? Kodunuza bağlı olarak, hiçbir şey geri gönderilmezse porttan okuma süresiz olarak engelleyecektir.

Denenmesi gerekenler:

  • senkron deneyin
  • zaman uyumsuz nedeniyle geri aramaları için karmaşık olabilir bir anda, diş vs de tek bir karakter okumaya çalışın.
  • Aygıtınız, kodunuzla çalışırken aynı emülatörden bağlandı mı?
  • cihaz kullanıyor protokolü kontrol
  • Çift içine okuduğunuz tampon artırmayı deneyin
  • tekrar kontrol edin baud hızı

İşte büyük bir destek/asio kaynak (POSIX tabanlı ama genel bilgi geçerlidir Tüm platformlar için: http://www.webalice.it/fede.tft/serial_port/serial_port.html

+0

Yazılımda görebildiğim kadarıyla bellek sızıntısı yok. Süreç tarafından kullanılan bellek Görev Yöneticisi'nde zamanla artmaz. İletişim (TX/RX, her 100 ms), tüm gün iyi çalışabilir, sonra hata bir kez gerçekleşir. Windows Olay Görüntüleyicisi'nde hiçbir şey yok. – Smash

+0

Tamam, tüm günü sorunsuz bir şekilde çalıştırıyor. VM sayfa havuzu/boyutunda hala bir sorun olabilir. Sanal hafızayı artırmayı deneyebilir veya bunu düzeltmek için çeşitli kayıt defteri keselerine göz atabilirsiniz. Diskiniz bütün gün IO çalışıyorsa, optimize edilebilen bir dosya sunucusu gibi davranıyor. Ayrıca Anti-Virüs'ü durdurmayı da deneyin. – adon