Вопрос

У меня возникли проблемы с получением потока для работы 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::Запуск потока' :конструктор делегата ожидает 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