Hallo zusammen,
ich habe ein Problem beim Zugriff auf eine Variable vielleicht kann mir einer auf die Sprünge helfen.Erstmal ich programmiere mit Visual Studio 2003 in C++ mit MFC.
Das gesamte Programm besteht aus einer größeren Benutzeroberfläche wo über Schlatflächen und Buttons gewisse Funktionen und Routinen gestartet werden. Hierbei soll u.a. mit einem START Button eine Schleife gestartet werden, die vom COM Port einen String einlesen, konvertieren und aufgeteilt in 2 EditControl Feldern im GUI ausgeben soll (es handelt sich dabei schlicht um einen Winkelsensor der Abweichungen in 2 Achsen misst und in einer Zeichenkette gepackt an die Schnittstelle schickt). Das einmalige Auslesen des Ports und die Ausgabe in den Feldern ist ja kein Problem allerdings soll dieses Auslesen und Ausgeben solange gemacht werden bis auf einen STOPP Button gedrückt wird (daher die Schleife). Ich habe jetzt mal versucht (für mich das erste Mal) die Schleife in einem eigenen Thread starten zu lassen, um überhaupt den Button fürs Beenden der Schleife drücken zu können, dass hat soweit auch geklappt.
Start Thread:
Aufgerufene Funktion:
Der Start des Thread erfolgt wie erwähnt durch drücken des Start-Buttons. Die aufgerufene Funktion ist global und somit nicht in der Klasse 'CDialog' wo sich die gesamte Benutzeroberfläche befindet( ich habe allerdings die andere Variante auch ausprobiert, dass die Funktion innerhalb der Klasse als statisch deklariert wird, das Problem bleibt das gleiche). Nun das Problem: in der Funktion 'getaxis' sollen nun die Werte eingelesen und in den Feldern der Benutzeroberfläche entsprechend ausgegeben werden, hierfür ist den Feldern jeweils ein CString als Value zugeordnet. Diese Variablen sind in der CDialog Klasse deklariert und der Zugriff auf diese wird mir innerhalb der Funktion nun verwehrt:
error C2597: Ungültiger Verweis auf nicht-statischen Member 'CDialog::xaxis'
Nun stellt sich mir die Frage wie ich auf diese Variablen aus der Klasse CDialog zugreifen kann bzw wie ich es schaffe immer die aktuellen Werte in den Feldern auszugeben (es muss nicht jeder einzelne Messwert sein es reicht wenn regelmäßig aktualisiert wird). Die Variablen statisch zu deklarieren funktioniert nicht ausserdem wird noch öfters auf diese zugegriffen wenn auch nicht parallel zu der laufenden Funktion. Die Messwerte einer anderen Variable zuzuordnen und ausserhalb der Schleife an die Felder zu übergeben ist auch nicht sinnvoll weil die Schleife ja vorerst nicht verlassen wird, die Felder aber einigermaßen zeitnah aktuell sein sollen. Gibt es da eventuell eine Möglichkeit dass so zu realisieren wie ich es angefangen habe oder hat jemand vielleicht eine Alternative (bin absolut kein Pro in C++ also für alles offen solang ichs versteh
)?
recht herzlichen Dank wenn sich einer die Mühe machen sollte
Gruß Michi
P.S. ich hatte mal wo gelesen dass man den this Zeiger als pParam übergeben kann um eben auf Funktionen und Variablen der Klasse zugreifen zu können deshalb übergebe ich in meinem Beispiel auch den 'this' Zeiger allerdings wenn ich dann innerhalb der Funktion über this-> versuche was zu finden gehts nicht. Keine Ahnung ob mir das allgemein weiterhilft aber vielleicht hat zumindest jemand ne Erklärung was ich da falsch mache.
ich habe ein Problem beim Zugriff auf eine Variable vielleicht kann mir einer auf die Sprünge helfen.Erstmal ich programmiere mit Visual Studio 2003 in C++ mit MFC.
Das gesamte Programm besteht aus einer größeren Benutzeroberfläche wo über Schlatflächen und Buttons gewisse Funktionen und Routinen gestartet werden. Hierbei soll u.a. mit einem START Button eine Schleife gestartet werden, die vom COM Port einen String einlesen, konvertieren und aufgeteilt in 2 EditControl Feldern im GUI ausgeben soll (es handelt sich dabei schlicht um einen Winkelsensor der Abweichungen in 2 Achsen misst und in einer Zeichenkette gepackt an die Schnittstelle schickt). Das einmalige Auslesen des Ports und die Ausgabe in den Feldern ist ja kein Problem allerdings soll dieses Auslesen und Ausgeben solange gemacht werden bis auf einen STOPP Button gedrückt wird (daher die Schleife). Ich habe jetzt mal versucht (für mich das erste Mal) die Schleife in einem eigenen Thread starten zu lassen, um überhaupt den Button fürs Beenden der Schleife drücken zu können, dass hat soweit auch geklappt.
Start Thread:
Code:
... AfxBeginThread(getaxis,this,THREAD_PRIORITY_NORMAL);
Aufgerufene Funktion:
Code:
UINT getaxis(LPVOID pParam) {
while (true) {
...
//xaxis ausgeben
//yaxis ausgeben
Sleep(250);
if(getstopcommand() == true) break;
}
return 0;
}
Der Start des Thread erfolgt wie erwähnt durch drücken des Start-Buttons. Die aufgerufene Funktion ist global und somit nicht in der Klasse 'CDialog' wo sich die gesamte Benutzeroberfläche befindet( ich habe allerdings die andere Variante auch ausprobiert, dass die Funktion innerhalb der Klasse als statisch deklariert wird, das Problem bleibt das gleiche). Nun das Problem: in der Funktion 'getaxis' sollen nun die Werte eingelesen und in den Feldern der Benutzeroberfläche entsprechend ausgegeben werden, hierfür ist den Feldern jeweils ein CString als Value zugeordnet. Diese Variablen sind in der CDialog Klasse deklariert und der Zugriff auf diese wird mir innerhalb der Funktion nun verwehrt:
Code:
CDialog::xaxis=MyDlg->valxaxis;
error C2597: Ungültiger Verweis auf nicht-statischen Member 'CDialog::xaxis'
Nun stellt sich mir die Frage wie ich auf diese Variablen aus der Klasse CDialog zugreifen kann bzw wie ich es schaffe immer die aktuellen Werte in den Feldern auszugeben (es muss nicht jeder einzelne Messwert sein es reicht wenn regelmäßig aktualisiert wird). Die Variablen statisch zu deklarieren funktioniert nicht ausserdem wird noch öfters auf diese zugegriffen wenn auch nicht parallel zu der laufenden Funktion. Die Messwerte einer anderen Variable zuzuordnen und ausserhalb der Schleife an die Felder zu übergeben ist auch nicht sinnvoll weil die Schleife ja vorerst nicht verlassen wird, die Felder aber einigermaßen zeitnah aktuell sein sollen. Gibt es da eventuell eine Möglichkeit dass so zu realisieren wie ich es angefangen habe oder hat jemand vielleicht eine Alternative (bin absolut kein Pro in C++ also für alles offen solang ichs versteh

recht herzlichen Dank wenn sich einer die Mühe machen sollte

Gruß Michi
P.S. ich hatte mal wo gelesen dass man den this Zeiger als pParam übergeben kann um eben auf Funktionen und Variablen der Klasse zugreifen zu können deshalb übergebe ich in meinem Beispiel auch den 'this' Zeiger allerdings wenn ich dann innerhalb der Funktion über this-> versuche was zu finden gehts nicht. Keine Ahnung ob mir das allgemein weiterhilft aber vielleicht hat zumindest jemand ne Erklärung was ich da falsch mache.