2016-03-24 15 views
4

私は(一見)ランダムエラーを取得しています「システムリソースが不足しているため、要求されたサービスを完了できません」。シリアルポートを有するブースト非同期読み取り/書き込みをして失敗し

のように宣言:このエラーに続い

boost::asio::serial_port mSerialPort; 

、私は

そのうちの一つ(ない特定まだ)ハング、決して返し、でも投げない
try 
{ 
    mSerialPort.cancel(); 
    mSerialPort.close(); 
} 
catch(boost::system::system_error error) 
{ 
    ; 
} 

にしてみてください例外。

一般に、このエラーは何を意味しますか?

誰でもこの問題が発生しましたか?特に私が調査すべき方向は?


EDIT:

問題のシリアルポートはUSBエミュレータを使用しています。

これに関して、other SO Questionは、特にHans Passantのコメントですが、このエラーはデバイスドライバにリンクされている可能性がありますか?私は別のハードウェアコンポーネントと同じコードを使用し、この動作を決して得ません。


EDIT 2:この特定のエラーメッセージのためのウェブ上で検索する場合

、多くの場合、ここで説明するようにページプールメモリを増やすことをお勧めします。

Microsoft Support Article

いかなる意味私の場合にこれを行うには?

+0

転送しようとしているデータのサイズとエラーの出現の間に相関関係を確立しようとしましたか? –

+0

データのサイズは常に同じです。小さなコマンドと応答です。サイズは約4〜10文字です。 – Smash

+0

この問題が発生したときに使用する特定のデバイスとデバイスドライバは何ですか? –

答えて

0

私はWindowsでシリアルポートを使って作業して以来、長い時間がかかりました。そのため、この回答を念頭に置いてください。非常に歴史的にNT 4.0日目には、正式なNTカーネルのDDKガイドラインで書かれたほとんどのシリアルポートドライバは、非同期I/Oを正しく実行できず、正確なエラーで時には失敗したりロックされたりします。解決策は、シリアルI/Oで同期I/Oを使用することだけでした。これは正しく機能しました。お使いのUSBベースのシリアルポート用のドライバが元々十分に古くなっている場合は、この問題が発生する可能性があります。

私はまた、あなたが既知の作業パターンと同じデザインパターンを使用していることを確認したいと思います。たとえば、http://www.ridgesolutions.ie/index.php/2012/12/13/boost-c-read-from-serial-port-with-timeout-example/を試してみてください。希望が役立ちます。

0

通常、このエラーは、メインメモリが最大になり、HDDがいっぱいになるまでシステムがスワップにメモリを割り当てていることを意味します。プログラムが実行されている時間に応じて、メモリリークの結果として発生する可能性があります。

しかし、あなたのケースでは、ドライバレベルで何かが起こっています。何かが報告された場合に備えてイベントビューアをチェックするべきです(ウィンドウを想定して)。

シリアルポートから何か戻ることができましたか?コードに応じて、何も送り返されなければ、ポートからの読み取りは無期限にブロックされます。

しようとするもの:時

  • 1つの文字を読んでみ
  • 非同期は同期してみスレッドなど、原因コールバックに複雑になることがあります。
  • デバイスが同じエミュレータで接続されたコードで動作していましたか?
  • は、デバイスが使用しているプロトコルを確認し
  • ダブルにあなたが読んでいるバッファを大きくしてみ
  • ダブルチェックボーレート

ここで偉大なブースト/ ASIOリソース(POSIXベースだが、一般的な情報が適用されますすべてのプラットフォームに):http://www.webalice.it/fede.tft/serial_port/serial_port.html

+0

ソフトウェアにメモリリークはありません。プロセスによって使用されるメモリは、タスクマネージャで時間とともに上昇することはありません。通信(100msごとのTX/RX)は一日中正常に動作し、エラーは一度発生します。 Windowsイベントビューアには何もありません。 – Smash

+0

さて、一日中問題なく走っています。それでもVMページプール/サイズの問題になる可能性があります。仮想メモリを増やしたり、さまざまなレジストリのハックをチェックしてこれを調整したりできます。あなたのディスクが一日中IOを実行している場合、最適化できるファイルサーバのように動作します。また、アンチウイルスを停止してみてください。 – adon

関連する問題