Thread Konstruktur Visual Studio 2013



  • Hi zusammen,

    ich habe einen wahrscheinlich recht einfach zu lösendes Problem, komme aber leider nicht drauf was ich falsch gemacht habe und die Lösung konnte ich bisher nicht finden.

    Das Programm soll im Grunde nur einen Thread öffnen beim ersten drücken den Thread starten und mit dem zweiten drücken den thread beenden.
    Ich erhalte aber einen Fehler im Konstruktor und finde den Fehler einfach nicht.
    Danke für eine schnelle Hilfe!

    int onCLickButton(){
    thread t(analyzeOnline,2);
    			if (!Online){
    				Online = true;
    				t.detach();
    			}
    			else {
    				Online = false;				
    			}
    }
    
    void analyzeOnline (Uint64 pParam){
    while (Online){}
    }
    


  • Ja was erhältst du denn für einen Fehler? Letzte Nacht ist mir die Fähigkeit Hellzusehen leider abhanden gekommen.



  • Der Fehler ist:

    2 IntelliSense: no instance of constructor "std::thread::thread" matches the argument list
    argument types are: (void (Uint64 pParam), int)

    Aber der Standard aufruf eines Thread ist doch thread "Threadname" ("NAme der aufzurufenden Funktion", parameter1, parameter2 etc)
    Oder liegt da schon mein Fehler?



  • ja das siehst du richtig. Allerdings wird deine "2" als Integer in den Konstruktor gegeben. - Sagt auch die Fehlermeldung.



  • Das ist Richtig. Ich habe die Codezeile nun entsprechend abgewandelt und den Uint64 vorher deklariert.

    Uint64 d = 234123123;
    			thread t(analyzeOnline,d);
    

    Dieser Kontruktor liefert nun folgenden Fehler:

    Error 1 error C3867: 'CTJA::analyzeOnline': function call missing argument list; use '&CTJA::analyzeOnline' to create a pointer to member
    2 IntelliSense: no instance of constructor "std::thread::thread" matches the argument list
    argument types are: (void (Uint64 permanentLinkID), Uint64)

    Ich verstehe den Fehler so, dass er gerne den Funktionsaufruf mit den Parametern in Klammern haben möchte. Wenn ich das ausprobiere wird mir vor dem kompilieren auch kein Fehler angezeigt. Kompiliert werden kann es dadurch dennoch nicht.



  • Ein Fall für std::bind 😉



  • Könntest du mir kurz erklären, was die Klasse macht und vorallem wieso ich sie an der Stelle benötige?

    Ich komme einfach nicht drauf, wieso der Standardaufruf an der Stelle nicht funktioniert.



  • madabor schrieb:

    Könntest du mir kurz erklären, was die Klasse macht und vorallem wieso ich sie an der Stelle benötige?

    Ich komme einfach nicht drauf, wieso der Standardaufruf an der Stelle nicht funktioniert.

    Ich behaupte:

    thread t(&analyzeOnline,d);
    


  • Sorry für die späte Rückmeldung.

    thread t(&analyzeOnline,d);
    

    Produziert folgenden Fehler:

    Error 3 error C2276: '&' : illegal operation on bound member function expression

    Ich habe nun eine andere Lösung ohne Threads gefunden und einfach eine OnChange Methode verwendet.

    Dennoch würde ich gerne herausfinden, welchen Fehler ich hier gemacht habe.


Anmelden zum Antworten