[4.02] Bug mit OpenFileRequester() und Threads

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

[4.02] Bug mit OpenFileRequester() und Threads

Beitrag von NicTheQuick »

Ich weiß nicht, ob das in der neuen Beta funktioniert, aber ich poste
meinen Fehler trotzdem mal.

Bitte "Threadsicher EXE" in den Compiler-Optionen wählen!

Wenn man folgenden Code startet und beim zweiten Requester auf
"Öffnen" drückt, stürzt das Programm mit der Fehlermeldung "Invalid
Memory Access" ab. Beim ersten Requester ist es egal, ob man "Öffnen"
oder "Abbrechen" klickt. Das Programm stürzt nicht ab, wenn man beim
zweiten auf "Abbrechen" drückt. Hat man allerdings eine Datei ausgewählt
und klickt auf "Öffnen", geht es den Bach hinunter.

Code: Alles auswählen

Structure set
  File.s
EndStructure

Procedure Thread(*set.set)
  *set\File = OpenFileRequester("Wählen sie die Datei aus...", "\", "Alle Dateien (*.*)|*.*", 0)
EndProcedure

set1.set
set2.set

t1 = CreateThread(@Thread(), @set1)
t2 = CreateThread(@Thread(), @set2)

WaitThread(t1)
WaitThread(t2)

Debug set1\File
Debug set2\File
Ich bräuchte den Code funktionsfähig, weiß aber nicht, wie ich am besten
ran gehen. Notfalls muss ich mir den OpenFileRequester() eben selbst
programmieren.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Wenn PB das Handle zum Hauptfenster übergibt (und das wird so sein, ist
normal) wirds im Thread nicht gehen, weil Ereignisse nur in dem Thread
ausgelöst werden sollten, wo das Hauptfenster erstellt wurde.

Ob Du per API mehr Erfolg hast, mit Handle 0 weiß ich nicht, aber ich glaube nicht.

Modale Dialoge sollten in Thread immer probleme machen
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Also nehmen diese ganzen Requester immer das Handle des letzten aktuellen
Fensters und "disablen" das?
Da hätte ich gerne einen Wunsch frei und wünsche mir einen optionalen
Parameter bei allen Requestern, mit dem ich das Parent-Window angeben
kann.

Falls das nicht hinhaut (und das ist wohl sehr wahrscheinlich), bliebe mir die
Möglichkeit über API, da mein Programm auf Linux nicht laufen wird.
Allerdings weiß ich nicht, mit welcher API ich diese Requester öffne...

Kann mir da jemand helfen? /:->
Dankeschön! :allright:

(Ich denke doch, dass im Bugs-Forum die Möglichkeit eines alternative Codes
gegeben werden kann. Falls nicht, wende ich mich ans API-Forum)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Ist eine ziemlich grosse Strukture, aber in PB vordefiniert:

Code: Alles auswählen

; Structure OPENFILENAME
;   lStructSize.l
;   hWndOwner.l
;   hInstance.l
;   lpstrFilter.l
;   lpstrCustomFilter.l
;   nMaxCustFilter.l
;   nFilterIndex.l
;   lpstrFile.l
;   nMaxFile.l
;   lpstrFileTitle.l
;   nMaxFileTitle.l
;   lpstrInitialDir.l
;   lpstrTitle.l
;   Flags.l
;   nFileOffset.w
;   nFileExtension.w
;   lpstrDefExt.l
;   lCustData.l
;   lpfnHook.l
;   lpTemplateName.l
; EndStructure
; 
Define.OPENFILENAME of
of\lStructSize = SizeOf(OPENFILENAME)
of\hWndOwner = WindowID(0) ; handle
of\hInstace = GetModuleHandle_(0)

GetOpenFileName_(of)
Mußt noch vervollständigen :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Danke, ts-soft!

Hab mir mal schnell was zusammengebaut. Ich machs dann mal noch in die
"Codes, Tipps & Tricks"-Ecke.
Antworten