![]() |
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 |
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 |
Re: TIDTCPServer Problem
Mhh kann mir bitte wer Helfen wie ich zum Beispiel den Port unter laufzeit des Programms änder kann???
|
Re: TIDTCPServer Problem
du kannst eine windows msg an deine anwendung schicken, diese wird dann beim verlassen deinen routine abgearbeitet.
|
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 |
Re: TIDTCPServer Problem
ich hack einfach hier mal los (also es ist nicht getestet):
Delphi-Quellcode:
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.
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; 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. |
Re: TIDTCPServer Problem
So hab jetzt des Probiert, jedoch bekomm ich beim Compelieren bei der Procedure:
Delphi-Quellcode:
diese Fehlermeldung: Unknown directive: 'message'
procedure TMyForm.MyMessageRoutine(var Message: TMessage); message WM_MyMessage;
begin // hier machen was nicht ging. end; Übrigens ich weiß zwar nich ob es stimmt aber ich hab statt
Delphi-Quellcode:
MyMessage = WM_USER + 838;
Delphi-Quellcode:
geschrieben.
WM_MyMessage = WM_USER + 838;
Mfg st0rm |
Re: TIDTCPServer Problem
bei der implementation einfach das angehängte
Delphi-Quellcode:
weglassen.
message WM_MyMessage;
das muss nur in der klassen definition stehen. |
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 |
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 22:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz