Programm hängt wenn ich keine Breakpoints einschiebe.
-
Hallo Leute,
ich komm bei meinem Programm nicht weiter:
ich hab einen server uind 2 clients (tcp/ip).
meine beiden clients können zum server in die lobby verbinden.
wenn ich die 2parts mit breakpoints stoppe und dann laufen lasse, geht mein prog sonst nicht.if (gd->game.servertype == 1) { gd->hdlHost = CreateThread(NULL, 0, trdHost, (void*)gd, 0, &gd->idxHost); } else if (gd->game.servertype == 2) { gd->hdlClient = CreateThread(NULL, 0, trdClient, (void*)gd, 0, &gd->idxClient); }
wenn ich [ALT]+[TAB] drücke, arbeitet die vorschau des einen clients korrekt aber ich kann ned zum fenster wechseln.
der 2. client hängt schon bevor meine game reinläde.ich hoff ich hab mich deutlich ausgedrückt.
hat mir wer einen Tipp?
-
Das kann man so nicht sagen.
An dem Code den du zeigst alleine liegt es sicher nicht.
-
Da müsstest du etwas mehr Quellcode zeigen. Am besten Quellcode der soweit reduziert wird, dass der Fehler immer noch auftritt, aber kein unnötiger Ballast mehr an Bord ist, denn niemand hier schaut sich gern 1000 Zeilen Quellcode an.
Welche IDE und welchen Compiler verwendest du? Vielleicht kann dir da auch jemand Tipps geben.
-
@efjam88 Ja, ohne mehr Code kann man nicht viel sagen. Falls das Programm aber nach dem einen Breakpoint ohne weitere Unterbrechung so läuft wie beabsichtigt, könnte man durchaus vermuten, dass zumindest dieses spezifische Problem irgendwo am Anfang der Thread-Funktionen liegt. Z.B. in irgendwelchem Initialisierungscode, der nur einmal aufgerufen wird. Ist aber nur Spekulation.
-
@Finnegan sagte in Programm hängt wenn ich keine Breakpoints einschiebe.:
Z.B. in irgendwelchem Initialisierungscode
Wird manchmal auch umgangssprachlich abwertend Boilerplate-Code genannt. In Java hätte man das Problem gsd nicht.
-
Sry weiß ned wie ich zich Zeilen auf ein paar reduzieren kann.
Also ich hab den Punkt gefunden wo mir ein "Sleep(1000)" hilft.
Aber hat wer ne Idee, wie ich rausfinde auf was ich warte?
-
Versuch das
Sleep(1000)
im Programmfluss so weit wie möglich nach hinten zu verschieben. Wenn der Fehler wieder auftritt, geh einen Schritt zurück, so dass es wieder funktioniert. Und dann zeig uns den Code um dasSleep(1000)
herum.Meine Vermutung: du greifst dort auf irgend eine Variable zu, die auch in einem anderen Thread verwendet wird. Also z.B. einer der Threads schreibt da was rein, und ein anderer liest die Variable und verwendet sie dann für irgendwas. Wenn das nicht korrekt synchronisiert ist, kann das leicht zu allen möglichen Fehlern führen. Inklusive dem dass das Programm dadruch einfach hängt.
Beispiel: Thread A erzeugt bei der Initialisierung ein Fenster und schreibt das Handle in eine globale Variable. Thread B liest diese globale Variable, und verwendet sie um irgendwelche Nachrichten an Thread A zu senden. Dabei müsstest du sicherstellen dass Thread B die Variable erst liest, nachdem Thread A sie geschrieben hat. Thread B erst nach Thread A zu starten ist dazu nicht ausreichend.