Seite 1 von 3

Programm hängt sich unter Windows 10 auf

Verfasst: 14.06.2018 11:48
von Thomas
Servus!

Ich schreibe ja alle PB-Programme hier auf meinem Win7-Rechner. Aktuell brauche ich aber eins auf meinem Win10-Tablet.

Mein Programm hängt sich aber am Win10-Tablet immer auf. Ohne "Kommentar" - Gibt es eine Möglichkeit das Programm wenn es vereckt zu debuggen, um den Fehler wenigstens eingrenzen zu können?

Wenn ich in meinem Programm Threads verwende, muss ich in den Compiler-Optionen "Thread-Sicheres Executeable erstellen" aktivieren?


Achja, bevor ich's vergesse ... kann es sein, dass PB 5.62 bei ReadFile/OpenFile nen Bug hat? :?

Sry, bin gerade etwas verzweifelt ....

Grüße
Thomas

Re: Programm hängt sich unter Windows 10 auf

Verfasst: 14.06.2018 11:52
von RSBasic
Wann hängt sich dein Programm auf? Direkt beim Kompilieren oder beim Start oder irgendwann während der Laufzeit?
Thomas hat geschrieben:Achja, bevor ich's vergesse ... kann es sein, dass PB 5.62 bei ReadFile/OpenFile nen Bug hat? :?
Nicht, dass ich wüsste. Mir ist nichts bekannt. Ich hatte nie Probleme damit. Was für einen Fehler hast du denn festgestellt?

Re: Programm hängt sich unter Windows 10 auf

Verfasst: 14.06.2018 12:20
von diceman
Thomas hat geschrieben:Gibt es eine Möglichkeit das Programm wenn es vereckt zu debuggen, um den Fehler wenigstens eingrenzen zu können?
Ich bin grad nicht an meinem Computer, aber ich meine in der "Preferences" im Menü gibt es ein Häkchen, was du aktivieren kannst, daß PureBasic bei einem Fehler ein Error-Logfile anlegt, bzw. in ein solches hineinschreibt. Dann hast du auch Feedback, wenn die IDE mal verreckt.
Hängt sich dein Programm auch auf, wenn du es ohne Debugger compilierst?

Re: Programm hängt sich unter Windows 10 auf

Verfasst: 14.06.2018 12:31
von Thomas
Hier auf Win7 hatte ich das Problem immer gleich nach'm compilieren - sprich, entweder ging's oder ging's garnicht. (Aber das habe ich nicht für ganz Voll genommen, hatte das Problem sogar mit diesem Code)

Code: Alles auswählen

Debug RGB(100, 200, 50) ; Als einzige Zeile ... sonst nix
Auf Win10 sporadisch während der Laufzeit.

An dem Häkchen wäre ich echt interessiert :)


Nicht, dass ich wüsste. Mir ist nichts bekannt. Ich hatte nie Probleme damit. Was für einen Fehler hast du denn festgestellt?
Die Datei wird einfach nicht geöffnet, sprich 0 zurückgegeben. PC-Neustart behebt das Problem ...

Re: Programm hängt sich unter Windows 10 auf

Verfasst: 14.06.2018 12:32
von ts-soft
Deine Aussage lässt vermuten, das Du threads verwendest. Da liegt dann wahrscheinlich auch Deine Problem. Es muss mehr getan werden, als nur den Haken in den Compiler-Optionen zu setzen :mrgreen: . Die File-Lib ist zwar threadsafe, aber nur wenn auch entsprechend programmiert wird. Die Compiler-Option sichert kaum mehr als die Strings ab.

Re: Programm hängt sich unter Windows 10 auf

Verfasst: 14.06.2018 12:38
von RSBasic
Thomas hat geschrieben:Hier auf Win7 hatte ich das Problem immer gleich nach'm compilieren
Wenn du deine Antivirensoftware temporär deaktivierst, besteht das Problem weiterhin?
Wenn nicht, dann liegt es daran und du musst eine Ausnahme-Regel für PB erstellen.

Re: Programm hängt sich unter Windows 10 auf

Verfasst: 14.06.2018 12:53
von Thomas
ts-soft hat geschrieben:Deine Aussage lässt vermuten, das Du threads verwendest. Da liegt dann wahrscheinlich auch Deine Problem. Es muss mehr getan werden, als nur den Haken in den Compiler-Optionen zu setzen :mrgreen: . Die File-Lib ist zwar threadsafe, aber nur wenn auch entsprechend programmiert wird. Die Compiler-Option sichert kaum mehr als die Strings ab.
Ja, es sind 2 oder 3 Threads die da laufen :freak:
Wie programmiert man Threadsafe, worauf ist zu achten? :? Gab scheinbar "damals" nen guten Grund, einen Bogen darum zu machen :bounce:

Die File-Lib wird nicht in Thrads verwendet.
RSBasic hat geschrieben:
Thomas hat geschrieben:Hier auf Win7 hatte ich das Problem immer gleich nach'm compilieren
Wenn du deine Antivirensoftware temporär deaktivierst, besteht das Problem weiterhin?
Wenn nicht, dann liegt es daran und du musst eine Ausnahme-Regel für PB erstellen.
Nö, das Problem mit Debug RGB ist dann weg.

Re: Programm hängt sich unter Windows 10 auf

Verfasst: 14.06.2018 13:06
von Thomas
// Nachtrag ...
es scheint wirklich irgendwie an den Threads zu hängen:
-> mit der "Thread-Sicheren Exe" ist es besser, also das Programm schließt sich nicht mehr ohne Grund, sondern friert "nur" ein :mrgreen:
-> das Problem kommt nur vor, wenn gerade Threads im Spiel sind.

=> wird ein steiniger Weg. Also wenn Ihr Tipps für sauberes Programmieren mit Threads habt, her damit. In der Hilfe steht ja nur man soll Vorsichtig sein - das lässt Interpretationsfreiraum :praise:

Re: Programm hängt sich unter Windows 10 auf

Verfasst: 14.06.2018 13:08
von NicTheQuick
Man kann nicht pauschal sagen, worauf man bei Threads achten muss, ohne weit auszuholen.
Du musst bei Threads allerdings dran denken, dass diese eben parallel nebeneinander laufen und es deswegen wichtig ist gemeinsame Ressourcen wie globale Variablen, Listen und Arrays und mehr gegenseitig abzusichern, wenn sie in mehr als einem Thread verwendet werden. Dafür gibt es unter anderem CreateMutex() und CreateSemaphore(). Beispiele gibt es auch in der Hilfe.
Angenommen du hast einen Thread, der eine globale Variable i 1000 mal um eins erhöht. Dann startest du diesen Thread x mal gleichzeitig. Das Ergebnis wird mit hoher Wahrscheinlichkeit nicht x * 1000 sein. Deswegen musst du die Variable mit einem Mutex schützen, indem du Lese- und Schreibzugriffe auf diese Ressource damit umschließt.

Aber ich merke schon. Ich fange wieder an zu weit auszuholen. :-D Machen wir es doch lieber umgekehrt. Was willst du mit deinen Threads machen? Dann können wir dir sagen, auf was du in diesem konkreten Fall Acht geben musst.

Ach, und denk dran. Dein Hauptprogramm ist auch ein Thread. Also mit dem ersten Aufruf von CreateThread() hast du bereits zwei Threads am Laufen. ;-)

Re: Programm hängt sich unter Windows 10 auf

Verfasst: 14.06.2018 13:11
von ts-soft
Wie programmiert man Threadsafe, worauf ist zu achten?
Das kann man so pauschal nicht beantworten, aber auf jeden Fall sind alle Objekte mit Mutex abzusichern. Desweiteren ist darauf zu achten, das alle Threads regulär beendet werden, bevor man sein Programm schließt (wäre z.B. bei FileLib erforderlich, das wirklich CloseFile() aufgerufen wird, das Du ja nicht nutzt.

Also Listen, Arrays usw. mit Mutex absichern und Threads sicher mit Semaphoren (SignalSemaphore()) absichern. Ohne Code kann ich Dir aber kein Beispiel geben.

Nachtrag: NickTheQuick war wohl schneller