1

私は特定の問題を抱えています。バッファが空でない場合、いくつかの期間で制御する1つの別個の作業スレッドが必要です。そうでない場合、スレッドはバッファ(ConcurrentQueue)からデータを送信します... CPUにとってそれほど高価ではない良い解決策はありますか?

これが私の方法です。うまくいきますが、あまりうまくいかないかもしれません(実際、スレッドの同期をあまり理解していません)。

public void start(object timeout){

            //Message - my own objective implementation of some tcp message
            Message m;
            while (true) {
                if (msgBuffer.Count != 0) {
                    if (msgBuffer.TryDequeue(out m)) {
                        client.SendData(MediatorPacket.GetPacketBytes(m));
                        SpinWait.SpinUntil(() => { if (msgBuffer.Count != 0) return true; else return false; });
                    }
                }
            }
        }*/
4

2 に答える 2

1

絶対。TPLDataFlowライブラリをご覧ください。特に、BufferBlockはニーズにぴったり合うはずです。また、この入門書は興味深い読み物だと思うかもしれません。

于 2012-09-19T23:25:34.320 に答える
0

ブロック動作のあるプロデューサー/コンシューマーを探しているように聞こえます(つまり、コンシューマーはブロックされ、バッファーにデータが入るまでスケジュールされません)。その場合は、BlockingCollectionをご覧ください。

于 2012-09-20T06:54:55.043 に答える