Frage

Ich habe Probleme bekommen einen Thread arbeitet mit OpenCV . Das Problem ist, mit dem Threadstart () Teil meines Codes.

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

Dies ist nicht der gesamte Code, aber der wichtige Rolle. Die Fehler, die wir bekommen sind:

  

1> .. \ .. \ .. \ .. \ .. \ .. \ .. \ Program Files (x86) \ OpenCV \ samples c \ circle dection.cpp \ (130): Fehler C2102: ' &‘erfordert l-Wert

     

1> .. \ .. \ .. \ .. \ .. \ .. \ .. \ Program Files (x86) \ OpenCV \ samples c \ circle dection.cpp \ (130): Fehler C3350: ' System :: Threading :: Threadstart‘: ein Delegierter Konstruktor erwartet 2 Argument (e)

War es hilfreich?

Lösung

Das Problem hierbei ist, dass Sie eine Funktion für einen ThreadStart Delegierten versuchen, zu verwenden, die eine inkompatible Signatur hat. ThreadStart ist ein Delegierter, der keine Argumente hat und gibt keinen Wert zurück. Sie versuchen, eine Methode zu verwenden, obwohl davon 4 Argumente annimmt. Das wird nicht funktionieren.

Sie müssen stattdessen in einer Methode übergeben, die keine Argumente übernehmen.

Parameter zu übergeben in C ++, die beste Wahl ist, eine neue Klasse zu erstellen, die alle Parameter als Felder. gibt dann ein Verfahren, das keine Parameter und gibt keinen Wert zurück und verwendet, die als das Ziel ThreadStart.

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

Es gibt ein volles Beispiel dafür auf der ThreadStart Dokumentationsseite

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top