Problem mit Varaiblen in Threads

Frank 2300

Grünschnabel
Hallo.

Ich habe ein Problem mit Variablen in Thread Funktionen unter Visual C++.
Das Programm ist eine SDI - Anwendung in der ich die Variablen im Dokument eingerichtet habe. Nun habe ich der Ansichtskalsse eine Thread funktion erstellt. Ich möchte von hier aus eine Variable(usbdc.DatenPort1INV) im Dokument lesen.

Code:
UINT Uebertragung (LPVOID pParam)

{
		CUSBIODoc usbdc;
		
		CClientDC dc (void);
		IOWKIT_HANDLE ioHandle;


	char s[89];
	char DatenLesen[80];
	char DatenLesen1[80];

	while (1)
	{
	
	iow.WritePort(1,usbdc.DatenPort1INV);
		
			//Lesen Daten aus Port
			result = iow.ReadImmediate((ULONG *) &read);
		}

Das Problem ist aber, dass er sie nur beim ersten mal aufruft, dann aber nicht wieder neu aus dem Dokument liest.

Schöne Grüße
Frank 2300

Edit von Matthias Reitinger: Bitte Code-Tags verwenden
 
Hallo,

Frank 2300 hat gesagt.:
iow.WritePort(1,usbdc.DatenPort1INV);

deklariere usbdc.DatenPort1INV mit volatile

BSP:

int volatile i;

Code:
 MSDN:

volatile

volatile declarator

The volatile keyword is a type qualifier used to declare that an object can be modified in the program by something other than statements, such as the operating system, the hardware, or a concurrently executing thread.

The following example declares a volatile integer nVint whose value can be modified by external processes:

int volatile nVint;

Objects declared as volatile are not used in optimizations because their value can change at any time. The system always reads the current value of a volatile object at the point it is requested, even if the previous instruction asked for a value from the same object. Also, the value of the object is written immediately on assignment.

One use of the volatile qualifier is to provide access to memory locations used by asynchronous processes such as interrupt handlers.

Der Compiler optimiert Programme. Wenn dein Thread gestarted wird geht er davon aus, dass die Variable nur in diesem Thread benutzt wird. Da keine neue Zuweißung im Thread erfolgt, behält die Variable ihren Wert.

volatile sagt dem Compiler, dass die Variable von Außerhalb geändert werden kann.
 
Zuletzt bearbeitet:
Hallo.

Danke für den Tip.

Ich habe die Variable mit volatile erweitert. Dies im Document, wo ich die Variable deklariere.

int volatile DatenPort1INV;

Das Problem besteht aber weiterhin. Oder muss ich diesen Zusatz in der Thread - Fuktion selbst machen?

Schöne Grüße
Frank
 
Zurück