我正在用C++和OpenCV編寫一些程序。類C++的線程程序
我想實現的是製作2個線程,並從我的課程中傳遞2個函數來加速計算。
我不擅長解釋,所以我只會告訴你你問題在哪裏!
這裏是我的類:
class mainApp
{
private:
cv::Mat frame;
int frameNumber;
HANDLE pbasThread;
HANDLE skinsegThread;
std::vector <HANDLE> threads;
PBAS pbas;
cv::Mat pbasResult;
SKINSEG skinseg;
cv::Mat skinsegResult;
private:
void find_connected_components(cv::Mat *mask, int poly1_hull0 = 1, float perimScale = 4.0, int* num = NULL, CvRect* bbs = NULL, CvPoint* centers = NULL);
static void __cdecl pbasThreadProc(void * Args)
{
cv::Mat bluredImage;
cv::GaussianBlur(frame, bluredImage, cv::Size(5,5), 1.5);
pbas.process(&bluredImage, &pbasResult);
cv::medianBlur(pbasResult, pbasResult, 5);
_endthread();
};
}
類似的東西。然後,我想在我的主應用程序中執行此操作:主函數:
while(1)
{
HANDLE pbasThread =(HANDLE) _beginthread(pbasThreadProc, 0, (void *)this);
threads.push_back(pbasThread);
if(threads.size() > 0)
WaitForMultipleObjects(threads.size(), & threads[ 0 ], TRUE, INFINITE);
...
}
在此示例中,我只使用1個線程,但通常我會使用更多。問題是,爲了編譯代碼,線程過程必須是靜態的,但是當過程是靜態的,我不能在它內部使用非靜態對象和函數..這導致了我的大問題。
任何想法的如何解決這個問題? (我不能讓所有事情都是靜態的......它必須保持原樣)。
你能不能把你所有的pbas,cv等放到一個類中,並將它的一個實例作爲'void * Args'來傳遞?既可以創建全局範圍的數組,也可以創建新的數組。 –