【问题标题】:Threading with .NET and OpenCV?使用 .NET 和 OpenCV 进行线程化?
【发布时间】:2010-12-09 22:45:16
【问题描述】:

我无法让线程与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:' &' 需要左值

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

【问题讨论】:

    标签: .net c++ multithreading static opencv


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多