1

ウィンドウがメッセージ(GigEカメラからの画像)を取得しているC#のコードがあります。関数ハンドラーでは、別の関数を呼び出して、メッセージから取得した画像に対して何らかの処理を行います。この処理には、次のメッセージを受信するまでの時間よりも時間がかかる場合があります。処理が完了するまでメッセージを無視するために、いくつかの優れたメカニズムを使用したいと思います。私は簡単に書くことができます:

bool is_processing = false;

void HandleUeyeMessage(int wParam, int lParam) 
{
   frame = getNewFrame();

   if(!is_processing) {
      doProcessing(frame);
   } else non-blocking ignore 
}

void doProcessing(frame f)
{
    is_processing = true;
    // some processing work...
    is_processing = false;
    return;
}

しかし、同期メカニズムを使用したいのですが、これは一般的にスレッド化されていないため、何を使用すればよいかわかりません...

4

1 に答える 1

0

シングルスレッドのメッセージを無視することはできません。アプリが応答できるようになると、メッセージはキューに入れられて処理されます。基本的な同期でワーカースレッドを使用できます。

BackgroundWorker _worker=new BackgroundWorker();

void OnMessage(int lparam, int wparam)
{
    frame frame=GetFrame();
   if(!_worker.IsBusy)
        _worker.RunWorkerAsync(frame);
}

void DoWork(object sender,DoWorkEventArgs e)
{
    //do processing
}
于 2013-03-07T14:45:09.483 に答える