我无法使用线程 开放式计算机视觉. 。问题出在我的代码的 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:'&' 需要左值

1>..\..\..\..\..\..\..\Program Files (x86)\OpenCV\samples\c\circle dection.cpp(130) :错误 C3350:'系统::线程::线程启动':委托构造函数需要 2 个参数

有帮助吗?

解决方案

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top