Verfasst: 25.01.2009 21:57
PB und Threads sind wohl wie Feuer und Wasser.
Wenn man sich anschaut was PB da macht:
Soweit so gut, hier wird der von PB angelegte Thread Local Storage ausgelesen.
Das dumme ist nur - es wird nicht geprüft ob das Lesen überhaupt funktioniert hat!
Denn das kann bei Threads auch mal nicht funktionieren weil ein anderer Thread noch darauf zugreift.
Der zweite Versuch schlägt Fehl und im Register EAX ladet der Return NULL.
NULL weils eben nicht funktioniert hat. (siehe WINAPI Doku. zu TLS)
Und natürlich gibt es später einen Exception Fehler wenn man versucht von NULL zu lesen.
In deinem Fall kannst du den Fehler umgehen indem du z.B. folgendes machst:
Das ist jedoch keine Garantie das es nicht wieder passieren kann,
an der Stelle geben wir Windows nur etwas mehr Zeit den TLS wieder freizugeben.
Wenn man sich anschaut was PB da macht:
Code: Alles auswählen
push eax
push dword_x
call TlsGetValue
mov edx, [eax]
pop eax
retnDas dumme ist nur - es wird nicht geprüft ob das Lesen überhaupt funktioniert hat!
Denn das kann bei Threads auch mal nicht funktionieren weil ein anderer Thread noch darauf zugreift.
Der zweite Versuch schlägt Fehl und im Register EAX ladet der Return NULL.
NULL weils eben nicht funktioniert hat. (siehe WINAPI Doku. zu TLS)
Und natürlich gibt es später einen Exception Fehler wenn man versucht von NULL zu lesen.
In deinem Fall kannst du den Fehler umgehen indem du z.B. folgendes machst:
Code: Alles auswählen
GetCursorPos_(@MausPosition.POINT)
SetGadgetText(#MausPosX, Str(MausPosition\x))
Delay(50)
SetGadgetText(#MausPosY, Str(MausPosition\y))
Delay(50)an der Stelle geben wir Windows nur etwas mehr Zeit den TLS wieder freizugeben.