Thread blockiert

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Thread blockiert

Beitrag von Scotty »

Mit PostMessage() funktioniert es! :D

Code: Alles auswählen

uses ...LMessage;
 
const LM_THREADTIMER=LM_USER
 
procedure TThreadTimer.SyncMethod;
begin
  if (FTimeLeft=0) then PostMessage(Application.Mainform.Handle, LM_THREADTIMER, 0, 0);
end;
....
type TMain=...
  procedure OnTimer(var Msg: TLMessage); message LM_THREADTIMER;
Uff...

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Thread blockiert

Beitrag von mse »

Scotty hat geschrieben:Das verstehe ich nicht. Gib mal bitte ein Beispiel, was passieren kann.
Beispielsweise, dass dein timer nicht wie vorgesehen funktioniert? ;-)
Ich kann dir nur ans Herz legen, mit threads absolut sauber zu arbeiten, jedes Gebastel rächt sich früher oder später.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Thread blockiert

Beitrag von mschnell »

Scotty hat geschrieben: Ich glaube aber, dass es gerade etwas vom Thema abweicht
Solange Du irgendwo ein Thread.Execute mit nichts als einer sleep(1) - Schleife hast, und solange Dir nicht klar ist, dass "Application.ProcessMessages" in einerm Thread kompletter Blödsinn ist und dass man im Mainthread keine Warteschleifen bauen darf, wirst Du nie etwas sinnvolles zustande bringen.

Wovon ist denn TThreadTimer abgeleitet ?

-Michael

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Thread blockiert

Beitrag von Scotty »

Solange Du irgendwo ein Thread.Execute mit nichts als einer sleep(1) - Schleife hast, und solange Dir nicht klar ist, dass "Application.ProcessMessages" in einerm Thread kompletter Blödsinn ist und dass man im Mainthread keine Warteschleifen bauen darf, wirst Du nie etwas sinnvolles zustande bringen.
Wahrscheinlich hast du recht. Lassen wir das also besser an dieser Stelle. Ich danke für alle Antworten, das hat mir auf jeden Fall geholfen.

Antworten