![]() |
Prozedur warten lassen
Moin,
ich bin gerade dabei eine DLL zu schreiben. Die Funktion, die durch ein Programm aufgerufen wird soll etwas von google zurückgeben, das heisst ich Öffne dort eine Socket-Verbindung. Das Problem ist nun, wie lass ich die Funktion warten bis ein Ergebnis (OnRead vom ClientSocket) ausgelöst wird? So sollte das ablaufen:
Delphi-Quellcode:
function AufzurufendeFunktion: Integer;
begin Result := 0; // Socket-Verbindung öffnen // Warten bis Ergebnis da ist end; procedure Socket.OnRead; begin Socket.ReceiveText; // Ergebnis ist da end; Nur wie setze ich das Warten um? |
Re: Prozedur warten lassen
mach doch einfach erst weiter, wenn das OnClientRead Ereigniss ausgeführt wurde. Dazu musst du nur alle weiteren Befehle in das OnClientRead Ereigniss hinter ...ReceiveText; schreiben.
Florian |
Re: Prozedur warten lassen
Hi Pseudo,
Was du brauchst, sind blockierende Sockets (Client-Type: ctBlocking). Schau dir dazu den TWinSocketStream an. grüße, daniel |
Re: Prozedur warten lassen
Zitat:
@Sanchez: Würde es reichen wenn ich bei ClientSocket auf ctBlocking stelle? Was würde das bewirken? |
Re: Prozedur warten lassen
Nein, es würde nicht reichen.
Bei blockierenden Verbindungen sieht der Aufruf ganz anders aus. Ich hab jetzt leider zuwenig Zeit, um dir ein Beispiel zu geben. Sieh dir mal den TWinSocketStream. Gegen Abend hab ich evtl. Zeit für ein kleines Beispiel. grüße, daniel |
Re: Prozedur warten lassen
Moin Sanchez,
leider habe ich keine Ahnung davon, d.h ich würd mich freuen wenn du heut Abend oder so ein Beispiel hättest;) mfg |
Re: Prozedur warten lassen
Hallo Pseudo,
Hier mal ein ungetesteter Versuch:
Delphi-Quellcode:
Mit den TimeOut-Zeiten kannst du ein wenig variiern. Wichtig ist, dass du den Socket auf ctBlocking einstellst und vorher verbindest.
function AufzurufendeFunktion: Integer;
var SockStream: TWinSocketStream; Buffer: Array[0..1024] of char; Request, Ergebnis: string; begin Ergebnis:= ''; Request := 'Anfrage'; FillChar(Buffer, sizeof(Buffer), #0); // Socket-Verbindung öffnen SockStream := TWinSocketStream.Create(ClientSocket.Socket,60000); SockStream.Write(Request, Length(Request) + 1); // Warten bis Ergebnis da ist if WaitForData(60000) then begin while (SockStream.Read(Buffer, SizeOf(Buffer)) <> 0) do begin Ergebnis:= Ergebnis+ Buffer; end; end; SockStream.Free; result := KeineAhnung; end; grüße, daniel |
Re: Prozedur warten lassen
Danke Sanchez, teste ich gleich ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 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