Seite 1 von 3
Bei OpenNetworkConnection() einen Timeout festlegen?
Verfasst: 15.10.2004 00:03
von pvmichael
Hi!
kann man bei OpenNetworkConnection() irgendwie einen Timeout festlegen? Bei mir wird 20 Sekunden gewartet, bis ein Timeout festgestellt wird.
Grüsse
Michael
Verfasst: 17.10.2004 10:52
von pvmichael
Zur Not wäre ich auch mit einer WinAPI Lösung zufrieden

Verfasst: 17.10.2004 13:01
von Andre
pvmichael hat geschrieben:Zur Not wäre ich auch mit einer WinAPI Lösung zufrieden

Wie z.B. InternetOpen_() ?
Bei mir wartet dies auch eine lange Zeit, ohne dies einstellen zu können. Scheint also Windows-spezifisch zu sein, es sei denn jemand wüsste noch eine andere Lösung...

Verfasst: 17.10.2004 14:02
von PBZecke
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.
Verfasst: 17.10.2004 14:05
von PMV
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
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)
MFG PMV
Verfasst: 18.10.2004 10:48
von stbi
vielleicht hilft das:
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.
Verfasst: 18.10.2004 11:02
von coldarchon
also 20 Sekunden sind für eine Netzwerkverbindung eine gute Zeit, bei weniger wirst Du einen hohen Beta Fehler erhalten.
Verfasst: 18.10.2004 17:51
von pvmichael
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
Verfasst: 18.10.2004 18:16
von PMV
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
Verfasst: 18.10.2004 19:36
von pvmichael
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