我无法让线程与 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;
}

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

最佳答案

这里的问题是您试图将函数用于具有不兼容签名的 ThreadStart 委托(delegate)。 ThreadStart 是一个没有参数且不返回值的委托(delegate)。您正在尝试使用一种需要 4 个参数的方法。这行不通。

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

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

ThreadHelper^ h = gcnew ThreadHelper();
h->Param1 = someValue;
ThreadStart^ threadDelegate = gcnew ThreadStart( h, &ThreadHelper::DoMoreWork );
ThreadStart 文档页面上有一个完整的示例
  • http://msdn.microsoft.com/en-us/library/system.threading.threadstart.aspx
  • 关于.net - 使用 .NET 和 OpenCV 进行线程处理?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1621629/

    10-13 06:46