|
分類:[C#]
はじめまして、やかんといいます。
キューついて、質問させてください。
状況は、「あるキューに対して、Enqueueが出来るが、Countが0」ということはありますか?
原因を考えた結果、各種宣言の仕方が原因なのかな?と思いました。
・クラスの宣言は以下の通りです。 Cというクラスがあります public class C
B(親)クラスから、Cクラスは以下のように宣言され、インスタンスが作られます。 private static C c; ※最初のメソッドで c = new C(); と設定してます。 最初に呼び出されたときに、外部からデータを受信してキューにため込むスレッド、外部へ送信するスレッドを生成します。
さらにBクラスは、Aクラスで以下のように宣言されます。 private B b = new B();
・キューについて Cクラスの中に、 private Queue<xxxx> RecvQue { get; set; } /*!< 受信キュー */ というキューがあります。
このキューは、Cクラスの中にCountというメソッドを作成し、それをBクラスから呼び出し、更にAクラスから呼び出せるようにしています。 Enqueueをするのは、Cクラスで生成されたスレッド内で行われます。 Dequeueをするのは、Cクラス内のメソッドです。(CountのようにAクラスから呼び出せます。)
また、キューはCount、Dequeue、Enqueue、Clearを行う際はにlock(_lockobj){}で囲むようにしています。 (_lockobjは、クラスCの頭に、private object _lockobj = new object();と宣言しています) →_lockobjはnetstreamのRead・Write時にも使用しています)
・現象について 相手装置のROMを変更し、再接続を行った結果、何故か、Enqueueは出来るが、Countを行うと0が返され、Dequeue出来なくなってしまいました。 (Countは、Aクラスが500msの周期で呼び出しています) もともとは、Enqueue、Count、Dequeueはバッチリ出来ていました。
相手装置と再接続したら、キューのオブジェクトが変わったりして、countが0でDequeueが出来なくなったのでしょうか?
どなたか、何かもし知っている事があれば、ご教示いただけないでしょうか? おねがいいたします><。
|