TThread.Current.ThreadId kennt D2009 nicht, aber TThread.CurrentThread.ThreadId. Schreibfehler oder Tokyo ?
Die aufrufende Methode:
Delphi-Quellcode:
procedure TTeletext.ShowTTxt(Mode : boolean; Page : integer);
var
ID1, ID2 : cardinal;
begin
ID1 := MainThreadID;
ID2 := GetCurrentThreadId; // TThread.CurrentThread.ThreadId;
if ID1 = ID2 then
LOG('ShowTTxt', 'Ich bin im Hauptthread')
else
LOG('ShowTTxt', 'Ich bin in einen anderen Thread Context:' + IntToStr(ID2));
if not Assigned(FOSD) then
begin
FOSD := TFormOSD.Create(nil);
end;
FOSD.OSDshow(Mode, FBMOSD);
SetPageNumber(Page);
FShowTTxt := Mode;
end;
Die empfangende Methode:
Delphi-Quellcode:
procedure TFormOSD.FormCreate(Sender: TObject);
var
ID1, ID2 : cardinal;
begin
ID1 := MainThreadID;
ID2 := GetCurrentThreadId; //TThread.CurrentThread.ThreadId;
if ID1 = ID2 then
LOG('FormCreate', 'Ich bin im Hauptthread')
else
LOG('FormCreate', 'Ich bin in einen anderen Thread Context:' + IntToStr(ID2));
...
end;
Mein LOGGER sagt:
Code:
[17:35:53:113] [TTXT - ShowTTxt]: Ich bin im Hauptthread
[17:35:53:116] [OSD - FormCreate]: Ich bin im Hauptthread
Letzteres ist mir völlig unbegreiflich, weil ich das vor ein paar Tagen explizit & ausführlich getest habe und da waren ID1 und ID2 noch unterschiedlich ! ... sonst hätte ich das in den Postings vorher nicht so besimmt geschrieben.
Desweiteren:
ID2 := GetCurrentThreadId;
funktioniert - hatte ich dieser Tage auch so.
ID2 := TThread.CurrentThread.ThreadId;
führt beim Beenden des Progs zu einer
AV - siehe angehängtes Bild.
.... ich versteh die Welt nicht mehr.