Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Konsolenprogramm und Multithreading (https://www.delphipraxis.net/86549-konsolenprogramm-und-multithreading.html)

Neutral General 15. Feb 2007 14:51


Konsolenprogramm und Multithreading
 
...oder so...^^

NajaHab das mit meinem Server-Client gedöns halbwegs zum laufen gebracht.. Nur mein Problem ist halt das mein Server nix macht solange readln aktiv ist... readln friert das ganze Programm ein.. Bisher hab ich es gemacht das man eben nichts eingeben kann im Server aber das soll nicht so sein... Kann ich nicht den Server oder so in nen anderen Thread verlagern und von da aus mit writeln Sachen schreiben aber trotzdem mit readln in der Hauptanwendung benutzen ? :freak:

Ich hoffe ihr wisst was ich meine *g*

Gruß
Neutral General

morp2 15. Feb 2007 14:53

Re: Konsolenprogramm und Multithreading
 
Zitat:

Zitat von Neutral General
Kann ich nicht den Server oder so in nen anderen Thread verlagern und von da aus mit writeln Sachen schreiben aber trotzdem mit readln in der Hauptanwendung benutzen ?

Da spricht nichts dagegen.

Neutral General 15. Feb 2007 14:56

Re: Konsolenprogramm und Multithreading
 
Ok kann mir das jemand bitte erklären :oops:
Ich hab mich noch nie wirklich mit Threads beschäftigt und wenn dann hab ich da nie wirklich durchgeblickt.. Also ich habs im Moment so:

Delphi-Quellcode:
type
  TMyServerThread = class(TThread)
  protected
    procedure Execute; override;
  public
    Server: TMyServerSocket;
    constructor Create(CreateSuspended: Boolean);
  end;

{ TMyServerThread }

constructor TMyServerThread.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
  Server := TMyServerSocket.Create;
  Server.Port := 1235;
  Server.Initialize;
end;

procedure TMyServerThread.Execute;
begin
  while not Terminated do
   Application.ProcessMessages;
end;

var ST: TMyServerThread;

begin
 ST := TMyServerThread.Create(true);
 ST.Execute;
 readln;
 ST.Suspend;
 ST.Terminate;
 St.Free;
end.
So läuft der Server zwar aber mit readln is da nix.. Läuft genauso wie ohne Thread :|

Gruß
Neutral General

morp2 15. Feb 2007 15:05

Re: Konsolenprogramm und Multithreading
 
Einfaches BSP:

Delphi-Quellcode:
program thread;
{$APPTYPE CONSOLE}

uses Windows;

function UnserThread(zahl: Pointer): LongInt; stdcall;
begin
  Sleep(2000);
  WriteLn('UnserThread ist fertig');
  Result:=0;
end;

var
  ThreadID: DWORD;      //Thread-ID
  ThreadHandle: THandle; //Rückgabewert von CreateThread

begin
  WriteLn;
  WriteLn('Unser Thread-Testprogramm ist gestartet.');
  WriteLn('Nun erzeugen wir den neuen Thread!');

  ThreadHandle:=CreateThread(nil, 0, TFNThreadStartRoutine(@UnserThread),
    nil, 0, ThreadID);

  //wenn der Thread erfolgreich gestartet wurde (ThreadHandle<>0), können
  //wir ThreadHandle wieder freigeben:
  if ThreadHandle<>0 then CloseHandle(ThreadHandle);

  WriteLn('Das Hauptprogramm ist nun am Ende angekommen.');

  //Automatisches Schließen der Konsole verhindern:
  ReadLn;
end.

Neutral General 15. Feb 2007 15:12

Re: Konsolenprogramm und Multithreading
 
uiiiiiiiiiiiiiiiiiiii :)

Sooo muss das gehn :)
Danke.. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:53 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