InitNetwork() can be called only once

Anfängerfragen zum Programmieren mit PureBasic.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

AND51 hat geschrieben:Wenn mans so macht, kann man NetworkInit() ohne Probleme auch mehrmals aufrufen, falls die Initialisierung beim 1. Mal nicht geklappt haben solle. Es wird dann immer der korrekte Rückgabewert zurückgegeben und die Initialisierung ggf. nochmal versucht.
Nein eben nicht. Wenn die initialisierung fehlschlägt und man probiert es nochmal, dann kommt eben jener Fehler vom Debugger. Man darf es nicht 2 mal initialisieren, wieso auch immer.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

bleibt die frage, aus welchem Grund InitNetwork fehlschlagen kann.

wenn es auch dann fehlschlägt, wenn eine Netzwerkkarte installiert und verfügbar ist,
aber kein Kabel drin oder der Router nicht an, dann wäre das unsinnig.

wenn es allerdings nur dann fehlschlägt, wenn der Rechner überhaupt nicht Netzwerkfähig ist,
weil keine Karte drin ist, dann ist es auch nicht sinnvoll, einen mehrfachen Init-Aufruf zu erlauben.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

DarkDragon hat geschrieben:
AND51 hat geschrieben:Wenn mans so macht, kann man NetworkInit() ohne Probleme auch mehrmals aufrufen, falls die Initialisierung beim 1. Mal nicht geklappt haben solle. Es wird dann immer der korrekte Rückgabewert zurückgegeben und die Initialisierung ggf. nochmal versucht.
Nein eben nicht. Wenn die initialisierung fehlschlägt und man probiert es nochmal, dann kommt eben jener Fehler vom Debugger. Man darf es nicht 2 mal initialisieren, wieso auch immer.
Achso, dann erlaubt der Debugger das mehrfache initialisieren nicht?`
Geht es denn ohne Debugger? Wenn ja, sehe ich kein Problem darin, es mehrmals zu versuchen, wenn die Initialisierung beim 1. Mal fehlschlägt. Ich hatte zwar dieses Szenario noch nie, aber ich kann mir vorstellen, dass es zum Beispiel dann fehlschlägt, wenn das Netzwerk inaktiv/abgestöpselt/ausgeschaltet ist. Dann könnte das Programm den Rückgabewert von InitNetwork() auswerten und Bescheid geben. Der Benutzer kümmert sich eben um das Problem, klickt im Programm auf "Wiederholen" und dann geht's. Ist doch besser, als das Programm neu starten zu müssen, nachdem der Benutzer das Netzwerk "angeworfen" hat. Das war mein Gedanke.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

es geht hier aber mal wieder nicht um vorstellen, sondern eher um wissen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Jo... Aber ich habe verständlicherweise keine Lust hier das Szenario eines halbtoten Netzwerks nachzustellen, nur um das jetzt im Rahmen dieses Threads genau zu ergründen.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

In einer Include würde ich im übrigen überhaupt kein InitNetwork() aufrufen, das mache ich i.d.R. im Hauptprogramm vor dem Einbinden.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Ich wuerd es so machen :

Code: Alles auswählen

Import ""
  PB_Network_Objects
EndImport 

If PB_Network_Objects = 0
  InitNetwork()
EndIf 
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Ist 'Ergebnis' gleich 0, ist kein TCP/IP-Stack auf dem System verfügbar, andernfalls wurde alles korrekt initialisiert.
Dieser TCP/IP-Stack dürfte doch dann vorhanden sein, wenn das Protokoll
im Betriebsystem installiert ist. Damit ist es unerheblich, ob eine
Netzwerkkarte im Rechner steckt oder nicht ... das könnte man aber
testen, in dem man einfach mal die Karte deaktiviert und dann InitNetwork()
aufruft.

Ohne vorhandene Netzwerkverbindung schlägt lediglich das Verbinden zu
entfernten Rechnern fehl, also OpenNetworkConnection().

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten