[Delphi] Zamarzanie programu - wątek+ProcessMessage

0

Mam główne okno proramu i w wątku mam coś takiego że co jakiś pojawia sie inna mała forma na 1 sekunde po czym znika. Problem w tym że na tą sekunde zamarza mi cały program mimo że jest w wątku:

var
  Forma: TForm;
  Sekundo: TSekundo;
  Zajety: Boolean;

Kod wątka:

procedure TSekundo.Execute;
begin
    Zajety:=True;
    Forma.Show;
    Application.ProcessMessages;
    Sleep(1000);
    Forma.Close;
    Zajety:=False;
end;

Wywołanie wątka (np. w buttonie):

if (Zajety=False) then
        Begin
        Sekundo.Execute;
        end;

To mój pierwszy raz gdzie stosuje wątek. Z tego co słyszałem to wykonuje się w tle więc nie wiem dlaczego cała aplikacja mi zamarza :-| . Obniżenie priorytetu też chyba nie wiele da.

0

Spróbuj sprawę załatwić Timerem, a nie za pomocą Sleep.

0

Chyba bede jednak musiał. Pisze w dll to w jakim module siedzi timer żeby go dynamicznie stworzyć?

EDIT: Już znalazłem. Tylko jak chce przypisać procedure OnTimer do dynamicznego Timera to mi nie chce jej przyjąć:

Timerek:=TTimer.Create(nil);
Timerek.OnTimer:=TimerekOnTimer;
Timerek.Enabled:=False;
0

Co oznacza termin "nie chce przyjąć" ?

0

I skoro to jest wątek, to do interakcji z obiektami interfejsu użytkownika (GUI) powinieneś używać funkcji Synchronize(..);

0

Próbowałem także z Senderem (jestem początkującym programistą i dokładnie nie wiem do czego to jest :) )

Timerek:=TTimer.Create(nil);
Timerek.OnTimer:=TimerekOnTimer(Sender: TObject);
Timerek.Enabled:=False;

A wywala mi takie coś:

[Error] ToolTip.dpr(92): Undeclared identifier: 'Sender'
[Error] ToolTip.dpr(92): Statement expected, but expression of type 'Class reference' found
[Error] ToolTip.dpr(95): '.' expected but ';' found
0
Timerek.OnTimer:=TimerekOnTimer;
0

No u mnie bez problemu działa taka konstrukcja :

    Timerek:=TTimer.Create(nil);
    Timerek.OnTimer := Timer1Timer;
    Timerek.Enabled:=False;
0

Ale próbowaliście w bibliotece DLL ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1