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

标签 .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) : error C2102: '&' requires l-value

1>..\..\..\..\..\..\..\Program Files (x86)\OpenCV\samples\c\circle dection.cpp(130) : error C3350: 'System::Threading::ThreadStart' : a delegate constructor expects 2 argument(s)

最佳答案

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

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

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

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

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

关于.net - 使用 .NET 和 OpenCV 进行线程化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1621629/

相关文章:

c# - 如何将 Unicode 转义序列转换为 .NET 字符串中的 Unicode 字符?

c++ - 在 Visual Studio 项目中本地复制 native 依赖项

c++ - 在结构中使用模板——制作通用链表

c++ - 编译 C++ 代码时出错(无效转换)

objective-c - 如何调度后台线程的操作 [Cocoa]

java - 如何将数组长度划分为长度为 3 倍数的数组

ios - 从两个并发线程在 iOS 上使用多个着色器

c# - 在 C# 中重写 protected 内部虚方法

java - 字符串中的空终止

c# - web.config/Global.asax 中的自定义错误处理不处理不存在的目录