Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TIDTCPServer Problem (https://www.delphipraxis.net/53356-tidtcpserver-problem.html)

storm1988 14. Sep 2005 19:56


TIDTCPServer Problem
 
Hi

Ich hab einen Server geschrieben der jede Sekunde ein Signale vom Client erhaltet. Diese Signale werden dann in der IdTCPServer1Execute Procedure verarbeitet. Und nun mein eigentliches Problem: Wenn der Server ein bestimmtes Signal erhaltet, soll er den Port ändern. Doch dazu muss ich ihn ja die Active Eigenschaft auf "False" setzen. Doch wenn ich das zum Beispiel in der ServerExecute Procedure mache, bekomme ich immer einen Read Fehler.

Nun meine Frage: Wie kann ich am besten den Port ändern????

Mfg st0rm

storm1988 15. Sep 2005 14:13

Re: TIDTCPServer Problem
 
Mhh hat keine eine Ahung??? Mir würde schon geholfen sein, wenn mir irgend wer sagen könnte wie ich den Server restarten kann!!

Mfg st0rm

storm1988 19. Sep 2005 08:05

Re: TIDTCPServer Problem
 
Mhh kann mir bitte wer Helfen wie ich zum Beispiel den Port unter laufzeit des Programms änder kann???

generic 19. Sep 2005 16:07

Re: TIDTCPServer Problem
 
du kannst eine windows msg an deine anwendung schicken, diese wird dann beim verlassen deinen routine abgearbeitet.

storm1988 19. Sep 2005 18:56

Re: TIDTCPServer Problem
 
Danke erst mal für deine Antwort :thumb:

Könntest du mir vielleicht ein Beispiel zeigen???
Andere Frage, gibt es bei der tidtcp Komponente nicht so etwas wie refresh damit alles upgedated wird??

Mfg st0rm

generic 20. Sep 2005 08:31

Re: TIDTCPServer Problem
 
ich hack einfach hier mal los (also es ist nicht getestet):

Delphi-Quellcode:
const
     MyMessage = WM_USER + 838;

type
  TMyForm= class(TForm)
    procedure MyMessageRoutine(var Message: TMessage); message WM_MyMessage;
  end;
 
procedure TMyForm.MeinRoutineInderIchwasAendernwillAberNichtkann(Sender: TObject);
begin
  PostMessage(Self.Handle, WM_MyMessage, 0, 0);
end;

procedure TMyForm.MyMessageRoutine(var Message: TMessage); message WM_MyMessage;
begin
  // hier machen was nicht ging.
end;
geht wie folgt. in der execute methode kannst du den port nicht ändern weil der workerthread dann gekillt wird und du allerding noch im workerthread bist.
die funktion postmessage trägt einen eintrag in die nachrichtenwarteschlage von deine form ein.
wenn dann dein form wieder etwas abarbeiten kann (z.b. wenn die onExec durch ist)
wird die routine MyMessageRoutine aufgerufen.

storm1988 22. Sep 2005 20:27

Re: TIDTCPServer Problem
 
So hab jetzt des Probiert, jedoch bekomm ich beim Compelieren bei der Procedure:

Delphi-Quellcode:
procedure TMyForm.MyMessageRoutine(var Message: TMessage); message WM_MyMessage;
begin
  // hier machen was nicht ging.
end;
diese Fehlermeldung: Unknown directive: 'message'

Übrigens ich weiß zwar nich ob es stimmt aber ich hab statt
Delphi-Quellcode:
MyMessage = WM_USER + 838;
Delphi-Quellcode:
WM_MyMessage = WM_USER + 838;
geschrieben.

Mfg st0rm

generic 23. Sep 2005 08:33

Re: TIDTCPServer Problem
 
bei der implementation einfach das angehängte
Delphi-Quellcode:
message WM_MyMessage;
weglassen.

das muss nur in der klassen definition stehen.

storm1988 23. Sep 2005 20:01

Re: TIDTCPServer Problem
 
Erst mal danke für die Hilfe :thumb: , jedoch hat das mein Problem dennoch nicht gelößt.....
Denn wenn ich in der onExecute die Message schicke, wird sie sofort verarbeitet, dass heiß das Programm wartet nicht bis die OnExecute Procedure abgearbeitet ist :?: :?:

mfg st0rm

Arnulf 26. Sep 2005 20:10

Re: TIDTCPServer Problem
 
Das kann eigentlich nicht sein.
wenn onExecute nicht in einem eigenen Thread läuft ( was so eigentlich nicht der fall ist ), dann wird die windows message sicherlich erst nach verlassen der onExecuter abgearbeitet.
Vielleicht springt er nachher gleich wieder in die onExecute oder sowas, aber ein programm kann nur eine funktion gleichzeitig abarbeiten fals du die nicht dirrect aufrufst.
Eine windows message wird erst abgearbeitet, wenn das programm idle ist oder wenn du eben dazwischen application.processmessages aufrufst.

Arnulf


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 Uhr.
Seite 1 von 2  1 2      

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