Потоки с .NET и OpenCV? - PullRequest
       12

Потоки с .NET и OpenCV?

4 голосов
/ 25 октября 2009

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

1 Ответ

3 голосов
/ 25 октября 2009

Проблема в том, что вы пытаетесь использовать функцию для делегата ThreadStart с несовместимой подписью. ThreadStart - это делегат, который не имеет аргументов и не возвращает никакого значения. Вы пытаетесь использовать метод, который принимает 4 аргумента. Это не сработает.

Вместо этого вам нужно будет передать метод, который не принимает аргументов.

Чтобы передать параметры в C ++, лучше всего создать новый класс, в котором все параметры представлены в виде полей. Затем дайте ему метод, который не имеет параметров и не возвращает значения, и используйте его в качестве цели ThreadStart.

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

Полный пример можно найти на странице документации ThreadStart

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...