0

私はここ数か月、顔追跡システムに取り組んできましたが、パフォーマンスを向上させるためにすべてを並行して実行する必要があります。

メインの cpp ファイルは次のとおりです。

int _tmain(int argc, _TCHAR* argv[])
{
    cFrame.initCamFrames(20, 1600, 1200, 3);     //INITIATES BUFFER FOR CAM FRAMES, 20 frames, res:1600x1200, 3bytes per pixel.
    eyeTracking.initTrackingSystem(&cFrame);     //INITIATES EYETRACKING SOFTWARE WITH POINTER TO THE BUFFER WHERE EYETRACKINGSOFTWARE GETS THE FRAMES TO SEARCH WITHIN. (opencv)


    directShow directShowClass;          
    directShowClass.initiateDirectShow(false, &cFrame);     //INITIATES DIRECTSHOW WITH POINTER TO BUFFER WHERE IT SHOULD SAVE FRAMES FROM CAM
    directShowClass.runDirectShow();        //START CAPTURING FRAMES INTO BUFFER
    eyeTracking.runTrackingSystem();        //START SEARCH FOR FACE AND EYES.

    system("pause");
    directShowClass.stopDirectShow();
}

「directShowClass.runDirectShow();」が欲しい および「eyeTracking.runTrackingSystem();」実際に並行して実行します。今では、疑似並列のスレッドとして実行されていると思います。(各メソッドの単純な printf はターミナルで混同して発生します)。

プログラムを並行して実行することは、私が望んでいるほど単純ではないと思います。しかし、私はそれが可能だと思います:D

並列化する方法に関する情報の検索をどこから開始すればよいかアドバイスをください。

デュアル コア プロセッサを使用しています。

ありがとう!

4

2 に答える 2

0

Printf はスレッドセーフではありません。つまり、遭遇したようにバッファを混同する可能性があります。プロセスを疑似並列 (各呼び出しを別の処理ステップに切り替えるなど) で実行するか、ハードウェア同時実行 (std::thread、pthreads、windows thread、boost::thread) で実行できます。

デュアル コア プロセッサを使用している場合は、マルチコア処理を確実に活用できます。ブーストを使用することをお勧めします。

于 2013-06-11T09:18:18.430 に答える