Seite 3 von 5
Verfasst: 14.07.2007 16:00
von mk-soft
N00B hat geschrieben:Mist
Brauche ein Threadsicheres PB
Somit bringt mir der Code 0

Was hat der Code mit Threadsafe zu tun? -> garnichts.
Für Threadsicheres programmieren gibt es Mutex und die Option
"Thread-sicheres Executable erstellen"
Verfasst: 14.07.2007 16:01
von N00B
Cool ein großes Danke mk-soft
Da ist der Code ja schon halbwegs pb4 fähig

Verfasst: 14.07.2007 16:02
von N00B
mk-soft hat geschrieben:N00B hat geschrieben:Mist
Brauche ein Threadsicheres PB
Somit bringt mir der Code 0

Was hat der Code mit Threadsafe zu tun? -> garnichts.
Für Threadsicheres programmieren gibt es Mutex und die Option
"Thread-sicheres Executable erstellen"
Ja dieser Code nicht, aber ich will ihn ja integrieren in ein Programm das mit mehreren Threads arbeitet.
Das mit Mutex usw hab ich alles schon hingekriegt, wie gesagt ich hänge seit nem halben Jahr nur am Timeout fest

Verfasst: 14.07.2007 16:03
von mk-soft
Nicht richtig gelesen?
Mit den Code gehen keine PB Network befehle. Must alles selber Programmieren.
Verfasst: 14.07.2007 16:10
von N00B
OMG
Alles selber ?
Mein Englisch ist nicht grade das Beste, vor allem beim übern Artikel fliegen.

Verfasst: 14.07.2007 16:19
von legion
mk-soft hat geschrieben:AMD Athlon(tm) 64 X2 Dual Core Prozessor 4400+
Code läuft nicht unter PB v4.02 aber unter PB v3.94.
Liegt also nicht am Prozessor.
Alles klar !
Habe auf alten Rechner auch ein altes PB.
Darauf hatte ich nicht geachtet.
Lg. Legion
Verfasst: 14.07.2007 16:46
von mk-soft
setsockopt
Mal testen ob es geht.
Code: Alles auswählen
InitNetwork()
Host$ = "www.purearea.net"
ServerID = OpenNetworkConnection(Host$, 80)
; Socket
socket = ConnectionID(ServerID)
time.l = 0
len.l = 4
; Zeiten auslesen - 0 ist wohl defaultwert
Debug getsockopt_(socket,#SOL_SOCKET, #SO_RCVTIMEO, @time, @len)
Debug "Receivetimeout: " + Str(time)
Debug getsockopt_(socket,#SOL_SOCKET, #SO_SNDTIMEO, @time, @len)
Debug "Sendtimeout: " + Str(time)
; Zeit setzen für Receive im millisekunden
time = 100
Debug setsockopt_(socket,#SOL_SOCKET, #SO_RCVTIMEO, @time,@len)
; Zeit überprüfen
time.l = 0
len.l = 4
Debug getsockopt_(socket,#SOL_SOCKET, #SO_RCVTIMEO, @time, @len)
Debug "Receivetimeout: " + Str(time)
If ServerID = 0
MessageRequester("", "Timeout")
Else
If SendNetworkString(ServerID, "GET / HTTP/1.1" + #CRLF$ + "Host: " + Host$ + #CRLF$ + #CRLF$)
Response$ = Space($FFF)
ResponseLen = Len(Response$)
Repeat
inLen = ReceiveNetworkData(ServerID, @Response$ + Pos, ResponseLen - pos)
Pos + inLen
Until inLen = 0 Or Pos = ResponseLen
MessageRequester("", Response$)
EndIf
CloseNetworkConnection(ServerID)
EndIf
Verfasst: 14.07.2007 17:12
von DarkDragon
mk-soft hat geschrieben:setsockopt
Mal testen ob es geht.
Hab ich schon vor ein paar Monaten. Das geht definitiv nicht mit connect_(). Da braucht man Non-Blocking-Sockets. setsockopt mit RCV_TIME und SND_TIME oder wie die heißen sind nur für die Pakete nach der Verbindungsherstellung.
Verfasst: 14.07.2007 20:30
von N00B
Ist echt deprimierend, selbst ihr die viel mehr Ahnung vom programmieren haben, finde keine Lösung.
All die Zeit und Arbeit die ich in mein Prog gesteckt hab sind umsonst.
Ich wollte ja schon auf Power Basic umsteigen(da kann man das Timeout direkt in ms angeben beim Befehl zum Aufbau einer Verbindung) so verzweifelt bin ich mittlerweile.
Aber das ist der Letzte Mist, um ein Hallo Welt Programm zu erstellen, im Fenster mit nem einfachen OK Button, braucht man zig Winapi Befehle und massig Code.(ich glaub nicht mal mit c++ bräuchte man halb so viel, nur um das Gerüst von einem Fenster mit Button Events zu erstellen)
Dazu keine Handbücher und Einstiegshilfen in Deutsch, geschweige den eine deutschprachige Community.
Und dazu noch ein super saftiger Preis.
130 €
Verfasst: 15.07.2007 08:04
von DarkDragon
Ist nicht ganz sauber, aber es funktioniert (Threadsafe
aus mit PB 4.02):
Code: Alles auswählen
; Author: DarkDragon (15.07.2007)
Structure SCONNECT
host.s
port.l
resultConnection.l
timedout.b
EndStructure
Procedure ConnectThread(*connectData.SCONNECT)
If *connectData
*connectData\timedout = 0
*connectData\resultConnection = OpenNetworkConnection(*connectData\host, *connectData\port)
If *connectData\timedout = 1 And *connectData\resultConnection <> 0
CloseNetworkConnection(*connectData\resultConnection)
EndIf
FreeMemory(*connectData)
EndIf
EndProcedure
Procedure OpenNetworkConnectionEx(ServerName.s, Port.l, Timeout)
Protected *connectData.SCONNECT
Protected startTime.l
*connectData = AllocateMemory(SizeOf(SCONNECT))
*connectData\host = ServerName
*connectData\port = Port
*connectData\resultConnection = 0
*connectData\timedOut = 0
If CreateThread(@ConnectThread(), *connectData)
startTime = ElapsedMilliseconds()
While currentTime < Timeout And *connectData\resultConnection = 0
Delay(1)
currentTime = ElapsedMilliseconds() - startTime
Wend
If *connectData\resultConnection = 0
*connectData\timedOut = 1
Else
ProcedureReturn *connectData\resultConnection
EndIf
Else
FreeMemory(*connectData)
EndIf
ProcedureReturn 0
EndProcedure
InitNetwork()
Debug "www.hahahahahah13233423.net:80 will timeout (Or someone bought the domain):"
Debug OpenNetworkConnectionEx("www.hahahahahah13233423.net", 80, 3000)
Debug "purearea.net:80 won't timeout:"
Debug OpenNetworkConnectionEx("www.purearea.net", 80, 3000)
End