0

クラスConcurrency::unbounded_bufferには、任意の数のメッセージを格納できます。しかし、保留中の(受信していない)メッセージの数を知る方法は?'unbounded_buffer'のメッセージ数

答えて

2

これを行うための機能は組み込まれていません。

あなたができることは、それと並んで整数をアトミックに増減することですが、同時にアクセスされている場合、これは信頼できるカウント(球場のみ)ではないことがわかります。

long count; 
Concurrency::unbounded_buffer<T> buffer; 

if(Concurrency::send(buffer, T())) 
{ 
    long new_count = _InterlockedIncrement(&count); 
} 

、他の場所:

T value = Concurrency::receive(buffer); 
long new_count = _InterlockedDecrement(&count); 

あなたは<intrin.h>に_Interlocked機能を見つけることができます。

+0

はい、あなたは正しいです - この情報を得るための既存のアクセス機能/メンバーはありません。 '_Queue'をタイプすると' _M_message_buffer'を見つけました。 '_Queue'クラスは' _Count'メソッドを持っています。しかし、残念ながら、( '_Queue'型​​の)この変数は' unbounded_buffer'クラスでprivateとして宣言されています – Ajay

関連する問題