【发布时间】:2013-12-09 17:08:55
【问题描述】:
我正在使用 C++ 和 OpenCV 编写一些程序。
我想要实现的是创建 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();
};
}
类似的东西。然后我想在我的 mainApp:main 函数中执行此操作:
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”传递?要么创建一个全局范围的数组,要么新建它们。
标签: c++ multithreading opencv