Pregunta

Tengo problemas para hacer que un hilo funcione con OpenCV . El problema es con la parte ThreadStart () de mi código.

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;
}

Esto no es todo el código sino la parte importante. Los errores que recibo son:

  

1 > .. \ .. \ .. \ .. \ .. \ .. \ .. \ Archivos de programa (x86) \ OpenCV \ samples \ c \ circle dection.cpp (130): error C2102: ' &erio;' requiere l-valor

     

1 > .. \ .. \ .. \ .. \ .. \ .. \ .. \ Archivos de programa (x86) \ OpenCV \ samples \ c \ circle dection.cpp (130): error C3350: ' System :: Threading :: ThreadStart ': un constructor delegado espera 2 argumento (s)

¿Fue útil?

Solución

El problema aquí es que intenta utilizar una función para un delegado ThreadStart que tiene una firma incompatible. ThreadStart es un delegado que no tiene argumentos y no devuelve ningún valor. Estás intentando usar un método que toma 4 argumentos. Esto no funcionará.

Tendrá que pasar un método que no tenga argumentos.

Para pasar parámetros en C ++, su mejor apuesta es crear una nueva clase que tenga todos los parámetros como campos. Luego, asigne un método que no tenga parámetros y no devuelva ningún valor y utilícelo como objetivo de ThreadStart .

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

Hay un ejemplo completo de esto en la página de documentación de ThreadStart

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top