Aktuelle Zeit: 20.10.2019 11:45

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
 Betreff des Beitrags: MessageRequester aus Thread aufrufen
BeitragVerfasst: 16.03.2018 14:27 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Bevor ich es wegwerfe...
Im Modul ThreadToGUI vorhanden
Code:
;-TOP
;
; MessageRequester aus Thread aufrufen
; mk-soft, v1.02, 16.03.2018

; -----------------------------------------------------------------------------

CompilerIf #PB_Compiler_Thread = 0
  CompilerError "Option Threadsafe aktivieren"
CompilerEndIf

Enumeration EventCustomValue #PB_Event_FirstCustomValue
  ; Nothing
EndEnumeration
 
Enumeration EventCustomValue
  #MyEvent_MessageRequester
EndEnumeration

Structure udtMessageRequester
  Signal.i
  Result.i
  Title.s
  Text.s
  Flags.i
EndStructure

Global LockMessageRequester = CreateMutex()

Procedure thMessageRequester(Title.s, Text.s, Flags=0)
  Protected *data.udtMessageRequester, result.i
  With *data
    *data = AllocateStructure(udtMessageRequester)
    If *data
      \Signal = CreateSemaphore()
      \Title = Title
      \Text = Text
      \Flags = Flags
      LockMutex(LockMessageRequester)
      PostEvent(#MyEvent_MessageRequester, 0, 0, 0, *data)
      WaitSemaphore(\Signal)
      UnlockMutex(LockMessageRequester)
      FreeSemaphore(\Signal)
      result = \Result
      FreeStructure(*data)
      ProcedureReturn result
    Else
      ProcedureReturn -1 ; Out Of Memory
    EndIf
  EndWith
EndProcedure

Procedure DispatchMessageRequester()
  Protected *data.udtMessageRequester
  With *data
    *data = EventData()
    If *data
      \Result = MessageRequester(\Title, \Text, \Flags)
      SignalSemaphore(\Signal)
    EndIf
  EndWith
EndProcedure

BindEvent(#MyEvent_MessageRequester, @DispatchMessageRequester())

; -----------------------------------------------------------------------------

CompilerIf #PB_Compiler_IsMainFile
 
  Procedure thMessage(Nummer)
    Protected r1
    Repeat
      Delay(1000)
      r1 = thMessageRequester("Frage", "Thread Nummer " + Nummer +  " beenden?", #PB_MessageRequester_YesNo | #PB_MessageRequester_Info)
    Until r1 = #PB_MessageRequester_Yes
  EndProcedure
 
  If OpenWindow(0, #PB_Ignore, #PB_Ignore, 200, 80, "Thread Test")
    CreateThread(@thMessage(), 1)
    CreateThread(@thMessage(), 2)
    CreateThread(@thMessage(), 3)
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Break
      EndSelect
    ForEver
  EndIf
 
CompilerEndIf

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye