AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Synchronisierung mit MainThread ohne Thread-Kontext
Thema durchsuchen
Ansicht
Themen-Optionen

Synchronisierung mit MainThread ohne Thread-Kontext

Ein Thema von s.h.a.r.k · begonnen am 29. Jun 2010 · letzter Beitrag vom 29. Jun 2010
Antwort Antwort
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

Synchronisierung mit MainThread ohne Thread-Kontext

  Alt 29. Jun 2010, 01:24
Delphi-Version: 2010
Und war interessiert mich, ob es möglich ist, mit dem MainThread zu synchronisieren, obwohl man sich nicht in einem TThread-Objekt befindet. TThread stellt ja automatisch die Synchronize() -Methode zur Verfügung. Aber selbst die statischen Klassenmethoden davon helfen mir nicht wirklich, da ich ja keine TThread-Instanz zur Verfügung habe.

Hintergrund des Ganzen ist, dass ich ein Handle im Kontext des MainThread erzeugen muss, um, darüber Nachrichten austauschen zu könnten. Mein Objekt will ich nicht von TThread ableiten, da es einfach unpassend ist. Zudem arbeitet diese Klasse als Singleton-Pattern mit Lazy Load, d.h. die einzige Instanz wird erst erzeugt, wenn diese auch zum ersten mal zum Einsatz kommt, d.h. im Klartext, dass auch ein Thread ungleich dem MainThread den Constructor aufrufen kann. Und genau hier liegt die Krux mit der Geschichte: im Constructor wird das Handle für die Klasse erzeugt.

Ich hoffe, dass die wichtigen Punkte klar rüber gekommen sind
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Synchronisierung mit MainThread ohne Thread-Kontext

  Alt 29. Jun 2010, 09:02
funktioniert doch:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var id:Cardinal;
begin
  BeginThread(nil,0,@TForm1.ThreadFunc,self,0,id);
end;

procedure TForm1.snyc;
begin
  if GetCurrentThreadId=system.MainThreadID then
    showmessage('yes');
end;

function TForm1.ThreadFunc: Integer;
begin
  TThread.Synchronize(nil,snyc);
end;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Synchronisierung mit MainThread ohne Thread-Kontext

  Alt 29. Jun 2010, 09:29
Die EnterMainThread/LeaveMainThread aus den AsyncCalls sollte eigentlich auch funktionieren.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

AW: Synchronisierung mit MainThread ohne Thread-Kontext

  Alt 29. Jun 2010, 17:30
@sirius: Wie, wenn wenn nil übergebe, so funktioniert das auch?! Auf die Idee bin ich noch gar nicht gekommen.

// edit
Hm, irgendwie führt der Aufruf von TThread.Synchronize(nil, ...) zu einem Deadlock Was aber wie zu erwarten an meinem Programm lag
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)

Geändert von s.h.a.r.k (29. Jun 2010 um 18:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: Synchronisierung mit MainThread ohne Thread-Kontext

  Alt 29. Jun 2010, 17:58
De9in Deadlock liegt aber an etwas anderem.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#6

AW: Synchronisierung mit MainThread ohne Thread-Kontext

  Alt 29. Jun 2010, 18:08
Siehe den Satz den ich noch dazu geschrieben habe. Der MainThread ist leider in den wartenden Zustand übergegangen -> CriticalSection.

Danke aber noch, hat wunderbar funktioniert.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz