Seite 1 von 1
Netzwerkfragen
Verfasst: 24.10.2014 15:10
von stevie1401
ich habe folgende Schleife:
Code: Alles auswählen
repeat
Event = WaitWindowEvent()
EventWindow = EventWindow()
EventGadget = EventGadget()
EventType = EventType()
If ConnectionID<>0
NetzwerkErgebnis = NetworkClientEvent(ConnectionID) ;ConnectionID ist der ClientSocket
EndIf
until programmende
Ich habe das Gefühl, ich kann nur dann vom Server Daten empfangen, wenn ein Windows-Ereignis stattfand, wegen WaitWindowEvent().
(Ich muss immer die Maus bewegen, damit weitere Daten angezeigt werden)
Wartet das Programm dann solange, bis ein Windows-Ereignis stattfand und ignoriert ankommende Socket-Daten?
Wenn ja, wie kann ich das ändern?
Re: Netzwerkfragen
Verfasst: 24.10.2014 15:15
von RSBasic
Ja, um das Problem zu beheben:
Dann werden alle 100 Millisekunden überprüft, ob ein Event stattfand.
Re: Netzwerkfragen
Verfasst: 24.10.2014 16:11
von stevie1401
Vielen Dank!
Re: Netzwerkfragen
Verfasst: 27.10.2014 10:40
von auser
RSBasic hat geschrieben:
Dann werden alle 100 Millisekunden überprüft, ob ein Event stattfand.
Außer jemand schiebt das Fenster rum. Dann blockt WaitWindowEvent(100) und auch WindowEvent() so lange bis man das Fenster wieder loslässt. Darum sollte man evtl. von vorne herein überlegen ob so Dinge eine Problem darstellen und ob es nicht sinnvoller ist für das Netzwerk gleich von Anfang an einen eigenen Thread zu nehmen um unabhängig von den Fenstergeschichten zu werden. Dann tut man sich auch leichter wenn man mal eben einen MessageRequester aufpoppen lässt und der User dann erst mal eine Minute auf den Monitor starrt ehe er sich entscheidet ob er Ja oder Nein drücken soll (und in der Zeit natürlich der Server trotzdem weiter läuft).
Code: Alles auswählen
OpenWindow(0,0,0,320,200,"Verschieb mich bitte...")
Repeat
Event = WaitWindowEvent(100)
Debug(ElapsedMilliseconds())
; If ConnectionID<>0
; NetzwerkErgebnis = NetworkClientEvent(ConnectionID) ;ConnectionID ist der ClientSocket
; EndIf
Until Event = #PB_Event_CloseWindow
Verfasst: 27.10.2014 11:38
von CodeCommander
~ DELETE ~
Re: Netzwerkfragen
Verfasst: 10.11.2014 20:18
von stevie1401
Ich würde das gerne ma mit #PB_Event_Timer und BindEvent() probieren.
Wie geht das genau?
Re: Netzwerkfragen
Verfasst: 10.11.2014 20:45
von ts-soft
Code: Alles auswählen
EnableExplicit
InitNetwork()
Global ConnectionID
Procedure TimerCallback()
Protected NetzwerkErgebnis
If EventTimer() = 1
If ConnectionID <> 0
NetzwerkErgebnis = NetworkClientEvent(ConnectionID) ;ConnectionID ist der ClientSocket
EndIf
EndIf
EndProcedure
OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "")
AddWindowTimer(0, 1, 100)
BindEvent(#PB_Event_Timer, @TimerCallback())
While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend
Re: Netzwerkfragen
Verfasst: 11.11.2014 00:02
von stevie1401
Vielen Dank

Re: Netzwerkfragen
Verfasst: 11.11.2014 13:52
von auser
Mit #PB_Event_Timer und BindEvent() blockt zwar dein Fenster nicht mehr den Netzwerk-teil dafür muss man dann aber halt wieder umgekehrt aufpassen daß nicht deine Netzwerk-funktionen dein Fenster blockieren. Darum denke ich daß Threads hier immer noch die beste Lösung sind wenn man das eine vom anderen unabhängig machen will.
Re: Netzwerkfragen
Verfasst: 11.11.2014 16:33
von HeX0R
Eigentlich ist es sogar die einzig wahre Lösung.
Es sei denn man bastelt nur einen Chat, wo mal alle paar Sekunden ein paar Bytes hin- und hergeschoben werden, da ist es relativ egal.
Sobald man größere Datenpakete versendet (und das Ganze evtl. sogar im GBit LAN), lässt sich das nur durch Threads ordentlich umsetzen.