Einzelnen Beitrag anzeigen

Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
378 Beiträge
 
Delphi 11 Alexandria
 
#49

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen

  Alt 18. Jul 2018, 16:47
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.
Miniaturansicht angehängter Grafiken
thread_err.jpg  
  Mit Zitat antworten Zitat