Brauche Hilfe mit Multithreading
-
Hallo ich habe jetzt schon einige Tutorials dazu durchgelesen aber irgendwie bekomme ich es einfach nicht zu laufen. Ich möchte über einen Button-Klick einen Thread starten der Parallel weiter läuft, damit meine Benutzeroberfläche weiterhin ansprechbar bleibt.
Hier ein Ausschnitt aus meinem Code, soweit ich das aus den Tutorials vertanden habe:
DWORD WINAPI ThreadFunktion(LPVOID param){ while (kommunikation){ //hier läuft eine Serielle Kommunikation } } private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) { DWORD threadId = 0; //starte ThreadFunktion HANDLE CreateThread( 0, 0, ThreadFunktion, 0, 0, &threadId ); }ich bekomme folgende beiden Fehler:
Form1.h(14): error C3867: 'Projekt1::Form1::ThreadFunktion': function call missing argument list; use '&Projekt1::Form1::ThreadFunktion' to create a pointer to member
Form1.h(18): error C2078: too many initializers
Der zweite liegt aber sicher nur an dem ersten Fehler und da verstehe ich nicht wie ich den beheben soll. Wo liegt mein Fehler? Oder geht das ansich gar nicht so.
Vielen Dank schon mal an alle die mir helfen

-
McKay schrieb:
Form1.h(14): error C3867: 'Projekt1::Form1::ThreadFunktion': function call missing argument list; use '&Projekt1::Form1::ThreadFunktion' to create a pointer to member
Also ich weiß nicht, wie ich es deutlicher sagen soll, als die Fehlermeldung das auch tut. Wenn du einen Funktionspointer übergeben willst (und das willst du), sollst du
&Projekt1::Form1::ThreadFunktionverwenden.Btw. ist das hier das falsche Forum. Du programmierst offensichtlich C++/CLI (.NET), nicht C++.
CreateThread ist aber aus der WinAPI. Hat C++/CLI bzw. .NET nicht was eigenes für Threads?
-
Hat C++/CLI bzw. .NET nicht was eigenes für Threads?
Gibts, System::Threading::Thread oder halt den Thread Pool oder die Async Calls, etc.
ABER: .NET hat auch gleich eine SerialPort Klasse die um einiges einfacher zu benutzen ist als die native WinAPI.
ABER2: Benutz nicht C++/CLI! http://www.c-plusplus.net/forum/263084
-
Entschuldigung für das falsche Forum, und das hatte ich vergessen hinzu zuschreiben, das hab ich auch schon probiert dann erhalte ich die folgende Fehlemelung die mir noch weniger sagt...
Form1.h(14): error C3374: can't take address of 'Projekt1::Form1::ThreadFunktion' unless creating delegate instance
-
Du musst eine Delegate Instanz erzeugen und sie in einen Function Pointer umwandeln - aber wie gesagt, tu dir einen gefallen und benutze entweder C++ oder C# aber NICHT C++/CLI.
-
Oh man... ich hab mir das viel einfacher vorgestellt, also ich erkläre nochmal kurz den Zusammenhang^^
Ich habe mit einem Kumpel dieses kleine Projekt und er schreibt das ganze Programm was auf dem PC laufen soll und ich mache die Elektronik auf einem Arduino-Board (das hängt an dem seriellen Port), nun wollte ich um meine ganzen funktionen zu testen nur dieses kleine Prog schreiben was meinem Board antwortet. Da mein Kumpel aber jetzt für 2 Wochen in den Urlaub gefahren ist kannn er das nicht machen und ich wollte eigentlich mit meinem Teil etwas weiter kommen. Eigentlich möchte ich da also gar nicht so tief in die C++ Thematik einsteigen es erschien mir nur recht praktisch da ich MS Visual C++ Express eh auf meinem rechner hatte das gleich damit zu schreiben...Meine Funktion die dem Board antwortet funktioniert ja auch soweit nur das ganze läuft eben in ner endlos schleife weshalb nach dem start meine oberfläche ja nicht mehr ansprechbar ist. Nun wolte ich aber über die anderen buttons befehle an das board schicken oder eben die kommunikation beenden. Ist das wirklich so schwer meine Funktion in nem extra thread laufen zu lassen um die oberlfläche aktiv zu lassen.

@theta
Danke für die Hinweise aber ich habe keine Ahnung was ne Delegate ist und wollte eben nur fix das Prog schreiben
naja das ich da nen tag dran sitze hätte ich auch nicht gedacht^^C++ hab ich eben schon kleinigkeiten geschrieben und C# noch nix...
sry ich hab echt nicht viel erfahrung im programmieren und war der meinung ich arbeite mit C++, kenne den unterschied zu C++/CLI gar nicht...Ich hoffe ihr könnt mir irgendwie helfen wie ich mein Prog zum laufen kriege oder wie ich ich wirklich in C++ schreibe und wie es dann funktioniert.
vielen dank nochmal an alle
