Was hat der Code mit Threadsafe zu tun? -> garnichts.N00B hat geschrieben:Mist
Brauche ein Threadsicheres PB
Somit bringt mir der Code 0
Für Threadsicheres programmieren gibt es Mutex und die Option
"Thread-sicheres Executable erstellen"
Was hat der Code mit Threadsafe zu tun? -> garnichts.N00B hat geschrieben:Mist
Brauche ein Threadsicheres PB
Somit bringt mir der Code 0
Ja dieser Code nicht, aber ich will ihn ja integrieren in ein Programm das mit mehreren Threads arbeitet.mk-soft hat geschrieben:Was hat der Code mit Threadsafe zu tun? -> garnichts.N00B hat geschrieben:Mist
Brauche ein Threadsicheres PB
Somit bringt mir der Code 0
Für Threadsicheres programmieren gibt es Mutex und die Option
"Thread-sicheres Executable erstellen"
Alles klar !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.
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
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.mk-soft hat geschrieben:setsockopt
Mal testen ob es geht.
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