Re: wie kann ich SaveFileRequester an Pos x,y
Verfasst: 29.01.2012 13:19
Dann kannst Du ja auch gleich eine x y Angabe als parameter implementieren.
Das deutsche PureBasic-Forum
https://www.purebasic.fr/german/
Wieso Timeout, wenn das Ende doch bestimmt istts-soft hat geschrieben:Hast ja recht![]()
Vielleicht sollte man doch noch ein TimeOut einbauen, damit ich dann wieder recht habe
Code: Alles auswählen
EnableExplicit
Define EventID.i
Define File.s
Define Thread.i
Global Semaphore.i = CreateSemaphore()
; Gefällt mir besser für so kurzlebige Daemon-Threads als ein Delay:
Procedure Yield()
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
SwitchToThread_()
CompilerElse
pthread_yield_()
CompilerEndIf
EndProcedure
Procedure MoveRequesterThread(a)
Protected hWnd
Repeat
hWnd = FindWindow_("#32770", "Hallo die Enten")
Yield()
Until hWnd <> 0 Or TrySemaphore(Semaphore) <> 0
If hWnd <> 0
MoveWindow_(hWnd, 500, 500, 500, 500, 0)
EndIf
EndProcedure
If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
Thread = CreateThread(@MoveRequesterThread(), 0)
If Thread
File = SaveFileRequester("Hallo die Enten", "", "", 0)
SignalSemaphore(Semaphore)
WaitThread(Thread)
; sicherstellen, dass Ampel wieder auf 0
TrySemaphore(Semaphore)
EndIf
Repeat
EventID=WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
End
EndIf
ForEver
EndIfNaja, da ist es eigentlich schon etwas overkilled eine Semaphore zu nutzen. Mit einem Mutex könnte man das auch machen:ts-soft hat geschrieben:Schönes Beispiel. Jetzt hab ich auch endlich die Semaphore besser verstanden
Code: Alles auswählen
EnableExplicit
Define EventID.i
Define File.s
Define Thread.i
Global Mutex.i = CreateMutex()
; Gefällt mir besser für so kurzlebige Daemon-Threads als ein Delay:
Procedure Yield()
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
SwitchToThread_()
CompilerElse
pthread_yield_()
CompilerEndIf
EndProcedure
Procedure MoveRequesterThread(a)
Protected hWnd
Repeat
hWnd = FindWindow_("#32770", "Hallo die Enten")
Yield()
Until hWnd <> 0 Or TryLockMutex(Mutex) <> 0
UnlockMutex(Mutex)
If hWnd <> 0
MoveWindow_(hWnd, 500, 500, 500, 500, 0)
EndIf
EndProcedure
If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
LockMutex(Mutex)
Thread = CreateThread(@MoveRequesterThread(), 0)
If Thread
File = SaveFileRequester("Hallo die Enten", "", "", 0)
UnlockMutex(Mutex)
WaitThread(Thread)
Else
UnlockMutex(Mutex)
EndIf
Repeat
EventID=WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
End
EndIf
ForEver
EndIfich nich, verstehe nur Bahnhof.ts-soft hat geschrieben:Schönes Beispiel. Jetzt hab ich auch endlich die Semaphore besser verstanden
Nee, die Jungs bauen gerade Türme zu Babel.kapege hat geschrieben:ich nich, verstehe nur Bahnhof.
Dient das der Thread Sicherheit?
Gruß Peter
Code: Alles auswählen
If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
Ente.i = OpenWindow(#PB_Any,500,500,0,0,"",#PB_Window_BorderLess,WindowID(0))
Keule.s = SaveFileRequester("Hallo die Enten", "", "", 0)
CloseWindow(Ente)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf