Bei OpenNetworkConnection() einen Timeout festlegen?
Bei OpenNetworkConnection() einen Timeout festlegen?
Hi!
kann man bei OpenNetworkConnection() irgendwie einen Timeout festlegen? Bei mir wird 20 Sekunden gewartet, bis ein Timeout festgestellt wird.
Grüsse
Michael
kann man bei OpenNetworkConnection() irgendwie einen Timeout festlegen? Bei mir wird 20 Sekunden gewartet, bis ein Timeout festgestellt wird.
Grüsse
Michael
OpenNetworkConnection() in einen Thread packen, dann wird Dein Programm wenigstens nicht blockiert. Ob das funktioniert weiß ich aber nicht, habe bis jetzt weder Netzwerk oder Treadfunktionen in PB benutzt. War nur so einene Idee.
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... 

Hm, also ich hab das problem auch schon vor langer Zeit festgestellt, aber mich damit abgefundenn. Allerdings wäre es doch möglich, das in einen Thread zu setzten und diesen einfach früher zu beenden. Oder gibs da risiken? Was auch immer ich damit meine
MFG PMV

Code: Alles auswählen
InitNetwork()
Global ConnectionID.l
Procedure OpenNetworkServer(Port.l)
ConnectionID=OpenNetworkConnection("www.Test.de",Port.l)
EndProcedure
MS = ElapsedMilliseconds()
ThreadID = CreateThread(@OpenNetworkServer(),6660)
WaitThread(ThreadID)
If ConnectionID <> 0 : CloseNetworkConnection(ConnectionID) : EndIf
Debug "ohne Thread"
Debug "ID: " + Str(ConnectionID)
Debug "MS: " + Str(ElapsedMilliseconds() - MS)
MS = ElapsedMilliseconds()
ThreadID = CreateThread(@OpenNetworkServer(),6660)
Delay(10000)
KillThread(ThreadID)
If ConnectionID <> 0 : CloseNetworkConnection(ConnectionID) : EndIf
Debug "Thread"
Debug "ID: " + Str(ConnectionID)
Debug "MS: " + Str(ElapsedMilliseconds() - MS)
vielleicht hilft das:
http://msdn.microsoft.com/library/defau ... _flags.asp
http://msdn.microsoft.com/library/defau ... _flags.asp
INTERNET_OPTION_CONNECT_TIMEOUT
2
Sets or retrieves an unsigned long integer value that contains the time-out value, in milliseconds, to use for Internet connection requests. If a connection request takes longer than this time-out value, the request is canceled. When attempting to connect to multiple IP addresses for a single host (a multihome host), the timeout limit is cumulative for all of the IP addresses. This option can be used on any HINTERNET handle, including a NULL handle. It is used by InternetQueryOption and InternetSetOption.
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."
Es gibt keine Vista-Witze. Es ist alles wahr!
Es gibt keine Vista-Witze. Es ist alles wahr!
-
- Beiträge: 26
- Registriert: 08.09.2004 09:33
- Kontaktdaten:
Also PMV's Lösungsvorschlag gefällt mir schon sehr gut. Allerdings ist Coldarchon's Einwand auch nicht ohne.
Der Grund, weshalb ich den Timeout heruntersetzen will ist, dass ich ein Tool schreibe, dass die Verfügbarkeit von Netzwerkdiensten verschiedener Server prüft. Dabei wird momentan ein Dienst/Server nach dem anderen überprüft. So lange alle Server und Dienste erreichbar sind, ist alles schön und gut, aber wenn ein Dienst oder Server ausgefallen ist, dann dauert der Prüfvorgang n*20 Sekunden so lange, als wenn alles erreichbar ist.
Im Prinzip wäre ein paralleles prüfen sehr interessant, aber da wüsste ich nicht, wie ich hinterher die Ergebnisse auswerten könnte.
Viele Grüsse
pvmichael
Der Grund, weshalb ich den Timeout heruntersetzen will ist, dass ich ein Tool schreibe, dass die Verfügbarkeit von Netzwerkdiensten verschiedener Server prüft. Dabei wird momentan ein Dienst/Server nach dem anderen überprüft. So lange alle Server und Dienste erreichbar sind, ist alles schön und gut, aber wenn ein Dienst oder Server ausgefallen ist, dann dauert der Prüfvorgang n*20 Sekunden so lange, als wenn alles erreichbar ist.
Im Prinzip wäre ein paralleles prüfen sehr interessant, aber da wüsste ich nicht, wie ich hinterher die Ergebnisse auswerten könnte.
Viele Grüsse
pvmichael
Die Ergebnisse wären dann doch nur, ob sie verfügbar sind oder nicht. Da würde es doch reichen, ein Array zu benutzten.
Also nach dem was ich jetzt von dir weiß würde das ganze doch so am besten funktionieren:
-Array auf die Anzahl der Dienste dimensionieren
-für jeden dienst einen thread starten, welcher versucht dorthin zu connection
-die Ergebnisse der Versuche dann einfach in das Array schreiben, dienst 1 also in Array(0), Dienst 2 in Array(1) usw.
-warten bis alle threads beendet sind oder abgebrochen wurden
-in einer schleife die arrays überprüfen, ob sie <> 0 sind
Das wärs doch, oder?
MFG PMV
Also nach dem was ich jetzt von dir weiß würde das ganze doch so am besten funktionieren:
-Array auf die Anzahl der Dienste dimensionieren
-für jeden dienst einen thread starten, welcher versucht dorthin zu connection
-die Ergebnisse der Versuche dann einfach in das Array schreiben, dienst 1 also in Array(0), Dienst 2 in Array(1) usw.
-warten bis alle threads beendet sind oder abgebrochen wurden
-in einer schleife die arrays überprüfen, ob sie <> 0 sind
Das wärs doch, oder?
MFG PMV
Hi PMV,
Danke! Das trifft es schon ziemlich gut!
So ist es im Moment:
Eine Schleife, welche die zu prüfenden Server/Dienste raussucht, führt ein OpenNetworkConnection aus, wertet das Ergebnis aus, und gibt den entsprechenden Status im ListIconGadget aus. Danach kommt der nächste Schleifendurchlauf.
Ich werde es (wahrscheinlich) so machen:
Eine Schleife, welche die zu prüfenden Server/Dienste raussucht, stösst je einen Thread an. Ich hoffe, man kann einem Thread Parameter übergeben? Jeder diese Threads ändert für sich den Eintrag im ListIconGadget. Damit laufen die ja dann quasi parallel.
Bin gespannt ob das klappt
viele Grüsse
Michael
Danke! Das trifft es schon ziemlich gut!
So ist es im Moment:
Eine Schleife, welche die zu prüfenden Server/Dienste raussucht, führt ein OpenNetworkConnection aus, wertet das Ergebnis aus, und gibt den entsprechenden Status im ListIconGadget aus. Danach kommt der nächste Schleifendurchlauf.
Ich werde es (wahrscheinlich) so machen:
Eine Schleife, welche die zu prüfenden Server/Dienste raussucht, stösst je einen Thread an. Ich hoffe, man kann einem Thread Parameter übergeben? Jeder diese Threads ändert für sich den Eintrag im ListIconGadget. Damit laufen die ja dann quasi parallel.
Bin gespannt ob das klappt

viele Grüsse
Michael