使用.NET和OpenCV进行线程化?

时间:2009-10-25 18:24:09

标签: .net c++ multithreading static opencv

我无法让线程与OpenCV一起使用。问题出在我的代码的ThreadStart()部分。

public ref class circles
{
    public:
        static void circleFind(bool isPhoto, const char *  windowName1, const char *  windowName2, const char * photoName)
        {(stuff)}
};

int main(int argc, char* argv[])
{
    const char *windowName1;
    const char *windowName2;
    const char *photoName;

    windowName1 = "Find Circles";
    windowName2 = "Gray";
    photoName = "Colonies 3.jpg";

    bool isPhoto = false;

    //circles(isPhoto, windowName1, windowName2, photoName);
    Thread^ circleThread = gcnew Thread(
        gcnew ThreadStart (&circles::circleFind(isPhoto, windowName1, windowName2, photoName) ));
    circleThread->Start();

    area(isPhoto, photoName);

    return 0;
}

这不是所有的代码,而是重要的部分。我得到的错误是:

  

1> .. \ .. \ .. \ .. \ .. \ .. \ .. \ Program Files(x86)\ OpenCV \ samples \ c \ circle dection.cpp(130):错误C2102:' &安培;”需要l值

     

1> .. \ .. \ .. \ .. \ .. \ .. \ .. \ Program Files(x86)\ OpenCV \ samples \ c \ circle dection.cpp(130):错误C3350:' System :: Threading :: ThreadStart':委托构造函数需要2个参数

1 个答案:

答案 0 :(得分:3)

这里的问题是您正在尝试为具有不兼容签名的ThreadStart委托使用函数。 ThreadStart是一个没有参数且没有返回值的委托。您正在尝试使用一个方法,但需要4个参数。这不行。

您需要传入一个不带参数的方法。

要在C ++中传递参数,最好的办法是创建一个将所有参数都作为字段的新类。然后给它一个没有参数的方法,不返回任何值,并将其用作ThreadStart目标。

ThreadHelper^ h = gcnew ThreadHelper();
h->Param1 = someValue;
ThreadStart^ threadDelegate = gcnew ThreadStart( h, &ThreadHelper::DoMoreWork );

ThreadStart文档页面上有一个完整的例子