Błędne wyświetlanie informacji w aplikacji konsolowej.

0

Cześć,
mam problem z aplikacją konsolową. Na początek troche kodu:

(...)

procedure TTestowaAplikacja.Run;
var
  obsluga:TObsluga;
begin

    writeLn('Uruchomiono testowy program.');

    writeLn('Uruchamiam nowy watek');

    obsluga:=TObsluga.Create;

    sleep(1000);

    writeLn('Dalsza czesc programu');

  end;


var
  TestowaAplikacja: TTestowaAplikacja;
begin

  TestowaAplikacja := TTestowaAplikacja.Create;
  TestowaAplikacja.Run;
  TestowaAplikacja.Free;
end.              

Moj problem polega na tym, ze fragment

    obsluga:=TObsluga.Create;

uruchamia watek, ktory wyswietla informacje "Uruchomiono nowy watek". Do tego fragmentu wszystko jest OK.

Nastepnie powinna pojawic sie informacja: "Dalsza czesc programu" jednak ponownie pojawiaja sie poprzednio wyswietlone informacje. W tym przypadku widze takie cos:

Uruchomiono testowy program.
Uruchamiam nowy watek.
Uruchomiono nowy watek.
Uruchamiam nowy watek.

Jak zmienie

writeLn('Uruchamiam nowy watek'); 

na writeLn('Cos tam');

 to w ogole dostaje:

Uruchomiono testowy program.
Uruchamiam nowy watek.
Uruchomiono nowy watek.
Cos tam
no testowy pro


:P

Myslalem o jakims synchronize w wyswietlaniu informacji z watku ale to sie chyba uzywa jak cos sie zmienia w 'wizualnych komponentach'.

Dorzuce jeszcze fragment z watkiem bo moze tam cos zle zrobilem (chce zawiesic ten watek zeby potem moc go wznowic).

```delphi
 TObsluga = class(TThread)
  protected
      procedure Execute; override;
      public
          constructor Create;
  end;

    constructor TObsluga.Create;
    begin
        inherited Create(false);
    end;


procedure TObsluga.Execute;

begin
      FreeOnTerminate := False;

      writeLn('Uruchomiono watek: Obsluga');

      Self.Suspend;

end; 

Teoretycznie banalnie prosty program a pewnie gdzies popelniam blad. Prosze o pomoc.

0

Od pyty podałeś informacji ale wciąż nie jasne z czym masz problem?
Kolejność wyświetlania informacji?
Oczekiwanie na zakończenie wątku?
Co ma zmiana tekstu do działania programu wielowątkowego?

0

hehe problem w tym, że po utworzeniu wątku on wyswietla informacje Uruchomiono nowy watek. i dziala sobie w tle nie konczac sie. A kolejne teksty wyswietlane za pomoca writeLn z poziomu TestowAplikacja.Run wyswietlane sa blednie bo w tym przypadku zamiast wyswietlic sie "Dalsza czesc programu" wyswietlaja sie fragmenty tych, ktore byly wyswietlone wczesniej.

Moglbym olac wyrzucanie informacji na konsole i zrobic np logger zapisujacy wszystko do pliku (wszystko jest OK!) ale nie lubie jak cos mi nie smiga...
Chodzi tylko o prezentacje tego na konsoli...

dostaje

Uruchomiono testowy program.
Uruchamiam nowy watek.
Uruchomiono nowy watek.
Uruchamiam nowy watek.

a powinno byc

Uruchomiono testowy program.
Uruchamiam nowy watek.
Uruchomiono nowy watek.
Dalsza czesc programu

To nie jest tak ze moje procedura TestowaAplikacja.Run tworzy watek i leci dalej wyswietlajac na konsoli to na co ma ochote? Probowalem nawet z WaitFor ale to samo... gdzies cos robie zle:D

0

Chodzi ci pewnie o to że wywaliłeś zaproponowaną przez Lazarusa komendę: Terminate; na końcu Run;

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