C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 130 を表示中)
■76822 / )  C♯におけるキューについて
□投稿者/ やかん (1回)-(2015/08/21(Fri) 01:10:35)

分類:[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が出来なくなったのでしょうか?

どなたか、何かもし知っている事があれば、ご教示いただけないでしょうか?
おねがいいたします><。
返信 編集キー/


管理者用

- Child Tree -