0

私はマルチスレッドと OpenMP の使用に関してまったくの初心者です。しかし、私は2つの機能を持つプログラムを開発しようとしています。

function1(){
get the data from the camera and save it into memory for 1000fps
}
functio2(){
display and refresh the screen each 100ms
}

OpenMPはこのようなものであるべきだと思います

#pragma omp sections
 {
   { function1(); }
   #pragma omp section
   { function2(); }
 }

しかし、これを実際にコード (c++) で実装するにはどうすればよいかわかりません。誰かが知っているなら、私に知らせてください。次のコードになってしまいましたが、2 番目のセクションを 100 ミリ秒ごとにスリープさせたいのですが、どうすればよいですか?

lastPicNr = 0;  
            if(Fg_AcquireEx(fg,nCamPort,GRAB_INFINITE,ACQ_STANDARD,_memoryAllc)<0){
                CExceptionHandler::GrabberErrorMessage(fg,"Can not start Acquiring images .");  
            }else{

                //Declaring a parallel region that will be broken down into disctinct parallel sections
                #pragma omp parallel sections
                {
                    #pragma omp section
                    {
                        while((lastPicNr = Fg_getLastPicNumberBlockingEx(fg,lastPicNr+1,nCamPort,10,_memoryAllc))<= MaxPics){   
                            iPtr=(unsigned char*)Fg_getImagePtrEx(fg,lastPicNr,0,_memoryAllc);      
                            _PointVector.push_back(iPtr);
                            _lastPicNumber.push_back(lastPicNr);                                
                        }
                    }

                    #pragma omp section
                    {
                        cv::Mat _matrixImage(cv::Size(w,h), CV_8UC1,iPtr , cv::Mat::AUTO_STEP);                                                                 
                        cv::imshow("test",_matrixImage);
                        cv::waitKey(10);

                    }
                }
                PauseClickMode(hDlg);
            }
4

1 に答える 1

1

これを行うにはさまざまな方法があります。OpenMP 3.0 以上をサポートするコンパイラがある場合は、タスク ディレクティブ http://bisqwit.iki.fi/story/howto/openmp/#TaskDirectiveOpenmp%203%200Onlyを使用できます。

Visual Studio には、タスク ディレクティブを持たない OpenMP 2.0 しかありません。私がしているのは、スレッドライブラリを使用することです。画像を表示したい場合は、SDL を検討することをお勧めします。pthreads とほとんど同じで、使いやすい (OpenMP ほど単純ではありませんが) スレッド化機能があります。
http://www.libsdl.org/intro.en/usingthreads.html

次に、画像を表示し、スレッドを実行し、クロスプラットフォームである 1 つのライブラリがあります。

于 2013-04-13T06:50:33.263 に答える