Thread & globale Variablen

Guten Tag,
ich habe hier einen thread, der die globale Var cWrite auswertet & in die globale Var cEmpfangen schreibt. mit while(1) schleife
Beides klappt, doch wenn ich cEmpfangen in einer anderen Funktion(andere Klasse) auslese, bekomme ich immer einen Blank zurück. habe die Var beide mit „extern char cWrite, cEmpfang;“ deklariert. :eek:

Hiiiiiiiiiiiiiiilfe!!!

Hallo Fragewurm,

ich habe hier einen thread, der die globale Var cWrite
auswertet & in die globale Var cEmpfangen schreibt. mit
while(1) schleife
Beides klappt, doch wenn ich cEmpfangen in einer anderen
Funktion(andere Klasse) auslese, bekomme ich immer einen Blank
zurück. habe die Var beide mit „extern char cWrite, cEmpfang;“
deklariert. :eek:

Jede Instanz der Klasse erzeugt eine eigene Variable, da wird wohl dein Problem liegen, du musst diese als static deklarieren, allerdings musst du dann auch wissen was du tust.

Ohne Source-Code kann man aber nichts weiteres dazu sagen.

MfG Peter(TOO)

Guten Tag,
ich habe hier einen thread, der die globale Var cWrite
auswertet & in die globale Var cEmpfangen schreibt. mit
while(1) schleife
Beides klappt, doch wenn ich cEmpfangen in einer anderen
Funktion(andere Klasse) auslese, bekomme ich immer einen Blank
zurück. habe die Var beide mit „extern char cWrite, cEmpfang;“
deklariert. :eek:

Zuerst einmal musst du dich darum kümmern, dass der Zugriff auf die Varibale synchronisiert wird. Wenn zwei Threads unkontrolliert lesend und schreibend auf die Variable zugreifen, kann es schon einmal solche Ergebnisse geben. cEmpfang darf erst dann gelesen werden, wenn ein gültiges Datum darin steht. Eine Semaphore scheint mir ein passendes Mittel zum Synchronisieren. Schau mal in deine Plattform-Doku.

Desweiteren solltest du in jedem Fall das Schlüsselwort „volatile“ in die Definition eingehen lassen:

extern volatile char cWrite;

Damit weisst du den Compiler an, in jedem Fall aus der Variablen zu lesen. Andernfalls erlaubst du ihm den Speicherzugriff wegzuoptimieren, u.a. könnte auch das eine Erklärung für dein Blank sein. Du musst bedenken, C/C++ kennt keine Threads!

Gruß Markus