Tool friert ein, nach verlassen von Schleife in Thread

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Tool friert ein, nach verlassen von Schleife in Thread

Beitrag von mk-soft »

Achtung!
Die Do... Befehle dürfen nur aus einen Thread verwendet werden.

Also die Funktion CreateScreenshot() Einmal für Threads kopieren und umschreiben.

P.S. Bastel gerade noch ein paar Befehle dazu, DoMessageRequester, etc
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Tool friert ein, nach verlassen von Schleife in Thread

Beitrag von mk-soft »

Habe noch mal mein Modul ThreadToGUI mit Requester erweitert.

Link: http://www.purebasic.fr/german/viewtopi ... =8&t=29728

Im dem Zuge habe ich erst mal Deine Windows Version mit den Modul erweitert.

Edit Läuft schon mal grob unter Linux. SysTray geht nicht

Code: Alles auswählen

;-Top

IncludeFile "Modul_ThreadToGUI.pb"

Enumeration #PB_Event_FirstCustomValue
  #My_Event_ThreadToGUI
EndEnumeration

UseModule ThreadToGUI

Enumeration
  #MainWin
  #CloseB
  #MinimizeB
  #PNG
  #BMP
  #JPG
  #TrackBar
  #TrayOption
  #MessageB
  #OpenFolderAfterSave
  #AskForName
  #UseDate
  #SetDefFolder
  #DefFolderText
  #TrayIcon
  #IMG
  #Sound
  #AUTO
  #AUTOAsk
EndEnumeration

own$=GetCurrentDirectory()

If 0; CountString(own$,"\") < 2
  MessageRequester("    Put me","in a Folder and start me again")
  End 
EndIf

If 0;FileSize(own$+"TrayIcon.ico") < 1500
  MessageRequester("    Tray","icon (TrayIcon.ico) not found")
  End
EndIf

Global config_valid
Global sndwork
Global stop_supervise
Global supervise_run

Procedure CreateScreenshot()
  
  pic = GetClipboardImage(#PB_Any)
  
  If IsImage(pic) 
    
    If GetGadgetState(#AUTOAsk)
      If supervise_run
        If MessageRequester("    INFO","Detected Image in Clipboard"+Chr(13)+Chr(13)+"Auto Create Image ? (if you click NO, the Data in the Clipboard will be erased to)",#PB_MessageRequester_YesNo) = #PB_MessageRequester_No
          ClearClipboard()
          ProcedureReturn
        EndIf 
      EndIf
    EndIf
    
    If GetGadgetState(#PNG)
      fpattern$="png | *.png" : ext$=".png" : format=1
    EndIf 
    If GetGadgetState(#BMP)
      fpattern$="bmp | *.bmp" : ext$=".bmp" : format=2
    EndIf
    If GetGadgetState(#JPG)
      fpattern$="jpg | *.jpg" : ext$=".jpg" : format=3
    EndIf
    
    If GetGadgetState(#AskForName)
      
      fname$ = SaveFileRequester("Save",GetGadgetText(#DefFolderText),fpattern$,0)
      
      If fname$ 
        
        fp$=GetPathPart(fname$) : ff$=GetFilePart(fname$) 
        
        If FileSize(fname$) > 0
          If MessageRequester(" Overwrite",fname$,#PB_MessageRequester_YesNo) = #PB_MessageRequester_No
            ClearClipboard()
            ProcedureReturn 
          EndIf
        EndIf
        fname$=RemoveString(fname$,ext$,#PB_String_NoCase) 
        fname$=fname$+ext$
        
      Else
        ClearClipboard()
        ProcedureReturn
      EndIf 
      
    Else
      
      ff$=FormatDate("%yyyy-%mm-%dd -- %hh-%ii-%ss", Date()) 
      default_output$=GetGadgetText(#DefFolderText)
      
      If FileSize(default_output$) = -1
        default_output$=GetHomeDirectory() 
        SetGadgetText(#DefFolderText,default_output$)
        MessageRequester("    Error","Default Folder don´t exist, saved Image @ "+default_output$)
        ProcedureReturn
      EndIf
      
      fname$=default_output$+ff$+ext$ : fp$=default_output$
      
    EndIf 
    
    If format=1
      SaveImage(pic,fname$,#PB_ImagePlugin_PNG)
    ElseIf format=2
      SaveImage(pic,fname$,#PB_ImagePlugin_BMP,#Null,DesktopDepth(0))
    ElseIf format=3
      SaveImage(pic,fname$,#PB_ImagePlugin_JPEG,GetGadgetState(#TrackBar)+1) 
    EndIf 
    
    ClearClipboard()
    
    ff$=GetFilePart(fname$)
    
    If GetGadgetState(#MessageB) 
      MessageRequester("    OK","Saved as "+ff$+Chr(13)+Chr(13)+"@ "+fp$)
    Else
      If sndwork
        PlaySound(#Sound)
      EndIf
    EndIf
    
    If GetGadgetState(#OpenFolderAfterSave) 
      RunProgram("explorer.exe",Chr(34)+fp$+Chr(34),"")
    EndIf 
    
  EndIf 
  
EndProcedure

Procedure ThreadCreateScreenshot()
  
  pic = DoGetClipboardImage(#PB_Any)
  
  If IsImage(pic) 
    
    If GetGadgetState(#AUTOAsk)
      If supervise_run
        If DoMessageRequester("    INFO","Detected Image in Clipboard"+Chr(13)+Chr(13)+"Auto Create Image ? (if you click NO, the Data in the Clipboard will be erased to)",#PB_MessageRequester_YesNo) = #PB_MessageRequester_No
          DoClearClipboard()
          ProcedureReturn
        EndIf 
      EndIf
    EndIf
    
    If GetGadgetState(#PNG)
      fpattern$="png | *.png" : ext$=".png" : format=1
    EndIf 
    If GetGadgetState(#BMP)
      fpattern$="bmp | *.bmp" : ext$=".bmp" : format=2
    EndIf
    If GetGadgetState(#JPG)
      fpattern$="jpg | *.jpg" : ext$=".jpg" : format=3
    EndIf
    
    If GetGadgetState(#AskForName)
      
      fname$ = DoSaveFileRequester("Threaded Save",GetGadgetText(#DefFolderText),fpattern$,0)
      
      If fname$ 
        
        fp$=GetPathPart(fname$) : ff$=GetFilePart(fname$) 
        
        If FileSize(fname$) > 0
          If DoMessageRequester(" Overwrite",fname$,#PB_MessageRequester_YesNo) = #PB_MessageRequester_No
            DoClearClipboard()
            ProcedureReturn 
          EndIf
        EndIf
        fname$=RemoveString(fname$,ext$,#PB_String_NoCase) 
        fname$=fname$+ext$
        
      Else
        DoClearClipboard()
        ProcedureReturn
      EndIf 
      
    Else
      
      ff$=FormatDate("%yyyy-%mm-%dd -- %hh-%ii-%ss", Date()) 
      default_output$=GetGadgetText(#DefFolderText)
      
      If FileSize(default_output$) = -1
        default_output$=GetHomeDirectory() 
        DoSetGadgetText(#DefFolderText,default_output$)
        DoMessageRequester("    Error","Default Folder don´t exist, saved Image @ "+default_output$)
        ProcedureReturn
      EndIf
      
      fname$=default_output$+ff$+ext$ : fp$=default_output$
      
    EndIf 
    
    If format=1
      SaveImage(pic,fname$,#PB_ImagePlugin_PNG)
    ElseIf format=2
      SaveImage(pic,fname$,#PB_ImagePlugin_BMP,#Null,DesktopDepth(0))
    ElseIf format=3
      SaveImage(pic,fname$,#PB_ImagePlugin_JPEG,GetGadgetState(#TrackBar)+1) 
    EndIf 
    
    DoClearClipboard()
    
    ff$=GetFilePart(fname$)
    
    If GetGadgetState(#MessageB) 
      DoMessageRequester("    OK","Saved as "+ff$+Chr(13)+Chr(13)+"@ "+fp$)
    Else
      If sndwork
        PlaySound(#Sound)
      EndIf
    EndIf
    
    If GetGadgetState(#OpenFolderAfterSave) 
      RunProgram("explorer.exe",Chr(34)+fp$+Chr(34),"")
    EndIf 
    
  EndIf 
  
EndProcedure

Procedure SaveActiveSettings(Close)
  
  If CreatePreferences(own$+"TurboImageGrabber.ini") 
    
    WritePreferenceString("key","a/3j@kn30N*b3<$k#ja!l3k9L")
    
    xxx=GetGadgetState(#TrayOption)
    WritePreferenceLong("tray start",xxx) 
    
    xxx$=GetGadgetText(#DefFolderText)
    WritePreferenceString("default output",xxx$)
    
    If GetGadgetState(#PNG)
      WritePreferenceString("default format","0")
    EndIf
    If GetGadgetState(#BMP)
      WritePreferenceString("default format","1")
    EndIf
    If GetGadgetState(#JPG)
      WritePreferenceString("default format","2")
    EndIf
    
    If GetGadgetState(#AUTO)
      WritePreferenceString("supervise","1")
    EndIf
    
    If GetGadgetState(#AUTOAsk)
      WritePreferenceString("supervise_ask","1")
    EndIf
    
    xxx=GetGadgetState(#TrackBar)
    WritePreferenceLong("jpg compression",xxx) 
    
    xxx=GetGadgetState(#OpenFolderAfterSave)
    WritePreferenceLong("open target",xxx)
    
    xxx=GetGadgetState(#MessageB)
    WritePreferenceLong("save message",xxx)
    
    xxx=GetGadgetState(#AskForName)
    WritePreferenceLong("save as user input",xxx) 
    
    ClosePreferences()
    
    If Close
      ;End
    EndIf
    
  Else
    If Close
      If MessageRequester("    Error","Can´t Create/Save Preference File (maybe no System Right's)"+Chr(13)+Chr(13)+"Still close Turbo Image Grabber ?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
        ;End
      EndIf 
    Else
      MessageRequester("    Error","Can´t Create/Save Preference File (maybe no System Right's)") 
    EndIf 
  EndIf 
  
EndProcedure

Procedure WatchForClipBoardImage(bla)
  
  supervise_run=1
  
  Repeat
    If stop_supervise
      Break
    EndIf
    Delay(20)
    ThreadCreateScreenshot()  
  ForEver
  
  supervise_run=0 
  
EndProcedure

Procedure InitSettings()
  
  If config_valid = 0
    SetGadgetState(#PNG,1)
    SetGadgetState(#MessageB,1)
    SetGadgetState(#AskForName,1)
    default_output$=GetUserDirectory(#PB_Directory_Documents)
    SetGadgetText(#DefFolderText,default_output$)
  Else 
    default_output$ = ReadPreferenceString("default output",GetUserDirectory(#PB_Directory_Documents))
    If FileSize(default_output$) = -2
      SetGadgetText(#DefFolderText,default_output$)
    Else 
      default_output$=GetUserDirectory(#PB_Directory_Documents)
      SetGadgetText(#DefFolderText,default_output$) 
    EndIf 
    
    default_format = ReadPreferenceLong("default format",0)
    If default_format < 0 Or default_format > 2
      SetGadgetState(#PNG,1)
    Else
      If default_format = 0
        SetGadgetState(#PNG,1)
      ElseIf default_format = 1
        SetGadgetState(#BMP,1)
      ElseIf default_format = 2
        SetGadgetState(#JPG,1)        
      EndIf 
    EndIf 
    
    jpg_compression = ReadPreferenceLong("jpg compression",7)
    If jpg_compression < 0 Or jpg_compression > 10
      jpg_compression=7
    EndIf 
    SetGadgetState(#TrackBar,jpg_compression)
    
    save_message = ReadPreferenceLong("save message",0)
    If save_message < 0 Or save_message > 1
      SetGadgetState(#MessageB,0)
    Else
      SetGadgetState(#MessageB,save_message)
    EndIf
    
    open_target = ReadPreferenceLong("open target",0)
    If open_target < 0 Or open_target > 1
      SetGadgetState(#OpenFolderAfterSave,0)
    Else
      SetGadgetState(#OpenFolderAfterSave,open_target)
    EndIf 
    
    save_as_user_input = ReadPreferenceLong("save as user input",1)
    If save_as_user_input < 0 Or save_as_user_input > 1
      SetGadgetState(#AskForName,1)
    Else
      If save_as_user_input
        SetGadgetState(#AskForName,1) 
      Else
        SetGadgetState(#AskForName,0)  
        SetGadgetState(#UseDate,1) 
      EndIf 
    EndIf
    
    If ReadPreferenceLong("supervise_ask",0)
      SetGadgetState(#AUTOAsk,1)
    EndIf
    
    If ReadPreferenceLong("supervise",0)
      SetGadgetState(#AUTO,1)
      CreateThread(@WatchForClipBoardImage(),0) 
    EndIf
    
  EndIf
  
  ClosePreferences() 
  
EndProcedure

If FileSize(own$+"TurboImageGrabber.ini") = -1
  CreateDef=1 : default_output$=GetUserDirectory(#PB_Directory_Documents)
Else
  If OpenPreferences(own$+"TurboImageGrabber.ini")
    ini_key$ = ReadPreferenceString("key","")
    ini_key_chk = FindString(ini_key$,"a/3j@kn30N*b3<$k#ja!l3k9L",1)
    If ini_key_chk
      config_valid=1
    Else
      MessageRequester("    No","valid Turbo Image Grabber ini File found")
      config_valid=0
    EndIf
  EndIf
EndIf 

#window_kon1=#PB_Window_ScreenCentered|#PB_Window_SystemMenu 
#window_kon2=#PB_Window_Invisible|#PB_Window_ScreenCentered|#PB_Window_SystemMenu 

Title$=" Turbo Image Grabber"
bla=309

If config_valid = 0
  OpenWindow(#MainWin, 100, 150, 255,bla,Title$,#window_kon1) 
Else
  open_in_tray = ReadPreferenceLong("tray start",0)
  If open_in_tray < 0 Or open_in_tray > 1
    OpenWindow(#MainWin, 100, 150, 255,bla,Title$,#window_kon1) 
  Else
    If open_in_tray = 0
      OpenWindow(#MainWin, 100, 150, 255,bla,Title$,#window_kon1) 
    ElseIf open_in_tray = 1
      OpenWindow(#MainWin, 100, 150, 255,bla,Title$,#window_kon2) 
    EndIf
  EndIf 
EndIf 

;AddSysTrayIcon(#TrayIcon,WindowID(#MainWin), LoadImage(#IMG, own$+"TrayIcon.ico"))
AddSysTrayIcon(#TrayIcon,WindowID(#MainWin), CreateImage(#IMG, 16, 16, 32, $0000FF)); LoadImage(#IMG, own$+"TrayIcon.ico"))

UseJPEGImageEncoder() : UsePNGImageEncoder()

If InitSound()
  UseOGGSoundDecoder()
  If LoadSound(#Sound,own$+"krapkrap.ogg")
    sndwork=1
  EndIf 
EndIf 

ButtonGadget(#CloseB,195,10,50,60,"Close Turbo Image Grabber",#PB_Button_MultiLine)
ButtonGadget(#MinimizeB,130,10,50,60,"Minimize Turbo Image Grabber",#PB_Button_MultiLine)

OptionGadget(#PNG,10,10,80,20,"Save as png")
OptionGadget(#BMP,10,30,85,20,"Save as bmp")
OptionGadget(#JPG,10,50,80,20,"Save as jpg")

TrackBarGadget(#TrackBar,5,81,245,10,0,10,#PB_TrackBar_Ticks) 
SetGadgetState(#TrackBar,7)

CheckBoxGadget(#TrayOption,10,100,80,20,"Open in Tray")

If open_in_tray = 1
  SetGadgetState(#TrayOption,1)
EndIf

CheckBoxGadget(#MessageB,10,120,115,20,"Message after Save")
SetGadgetState(#MessageB,1) 

CheckBoxGadget(#OpenFolderAfterSave,10,140,170,20,"Open Target folder after Saving")

CheckBoxGadget(#AskForName,10,160,110,20,"Ask for Save Name")
SetGadgetState(#AskForName,1)

CheckBoxGadget(#UseDate,10,180,165,20,"Use Date+Time as File Names") 
ButtonGadget(#SetDefFolder,10,206,235,20,"Set Standard Output Folder") 
StringGadget(#DefFolderText,10,235,235,20,default_output$,#PB_String_ReadOnly)  

CheckBoxGadget(#AUTO,10,260,215,20,"Auto Create Image  |  Supervise Clipboard")
CheckBoxGadget(#AUTOAsk,10,280,225,20,"Ask before Auto Create @ Supervise Mode")

If CreateDef
  SaveActiveSettings(0) : InitSettings()  
Else
  InitSettings()  
EndIf 

ExamineDesktops() 

ThreadToGUI::BindEventGUI(#My_Event_ThreadToGUI)

Repeat 
  
  WindowEvent = WaitWindowEvent() : EventGadget = EventGadget()
  
  If WindowEvent = #PB_Event_SysTray
    
    If EventType() = #PB_EventType_LeftClick 
      CreateScreenshot() : SaveActiveSettings(0) 
    EndIf
    
    If EventType() = #PB_EventType_LeftDoubleClick
      HideWindow(#MainWin,0) : SetActiveWindow(#MainWin) : SaveActiveSettings(0) 
    EndIf
    
    If EventType() = #PB_EventType_RightDoubleClick
      If MessageRequester("    Close Turbo Image Grabber","Are you sure ?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
        SaveActiveSettings(1)
        Break
      EndIf
    EndIf 
  EndIf
  
  If WindowEvent = #PB_Event_Gadget
    
    If EventGadget = #CloseB 
      If MessageRequester("    Close Turbo Image Grabber","Are you sure ?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
        SaveActiveSettings(1)
        Break
      EndIf 
    EndIf
    
    If EventGadget = #MinimizeB
      CreateScreenshot() : HideWindow(#MainWin,1) : SaveActiveSettings(0) 
    EndIf
    
    If EventGadget = #AskForName
      If GetGadgetState(#AskForName)
        SetGadgetState(#AskForName,1) : SetGadgetState(#UseDate,0) 
      Else
        SetGadgetState(#AskForName,0) : SetGadgetState(#UseDate,1)
      EndIf
    EndIf
    
    If EventGadget = #UseDate
      If GetGadgetState(#UseDate)
        SetGadgetState(#UseDate,1) : SetGadgetState(#AskForName,0) 
      Else
        SetGadgetState(#UseDate,0) : SetGadgetState(#AskForName,1)
      EndIf 
    EndIf 
    
    If EventGadget = #AUTO
      If GetGadgetState(#AUTO)
        stop_supervise=0
        CreateThread(@WatchForClipBoardImage(),0) : SetGadgetState(#AUTO,1)
      Else
        SetGadgetState(#AUTO,0) : stop_supervise=1 
      EndIf 
    EndIf
    
    If EventGadget = #SetDefFolder
      If FileSize(default_output$) <> -2
        default_output$=GetUserDirectory(#PB_Directory_Documents)
      EndIf 
      default_output$=PathRequester("Choose Default Output Path",default_output$)
      If default_output$
        SetGadgetText(#DefFolderText,default_output$)
        SaveActiveSettings(0)
      EndIf 
    EndIf
    
  EndIf
  
  If WindowEvent = #PB_Event_CloseWindow
    CreateScreenShot()
    HideWindow(#MainWin,1)
    SaveActiveSettings(0) 
  EndIf 
  
ForEver 

Debug "Ende"
Habe ein paar Sachen zum testen ausgeklammert
Zuletzt geändert von mk-soft am 28.06.2017 00:26, insgesamt 1-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
GlassJoe
Beiträge: 108
Registriert: 11.06.2017 20:25
Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400

Re: Tool friert ein, nach verlassen von Schleife in Thread

Beitrag von GlassJoe »

mk-soft hat geschrieben:Habe noch mal mein Modul ThreadToGUI mit Requester erweitert.

Link: http://www.purebasic.fr/german/viewtopi ... =8&t=29728

Im dem Zuge habe ich erst mal Deine Windows Version mit den Modul erweitert.

Edit Läuft schon mal grob unter Linux. SysTray geht nicht

Code: Alles auswählen

;-Top

IncludeFile "Modul_ThreadToGUI.pb"

Enumeration #PB_Event_FirstCustomValue
  #My_Event_ThreadToGUI
EndEnumeration

UseModule ThreadToGUI

Enumeration
  #MainWin
  #CloseB
  #MinimizeB
  #PNG
  #BMP
  #JPG
  #TrackBar
  #TrayOption
  #MessageB
  #OpenFolderAfterSave
  #AskForName
  #UseDate
  #SetDefFolder
  #DefFolderText
  #TrayIcon
  #IMG
  #Sound
  #AUTO
  #AUTOAsk
EndEnumeration

own$=GetCurrentDirectory()

If 0; CountString(own$,"\") < 2
  MessageRequester("    Put me","in a Folder and start me again")
  End 
EndIf

If 0;FileSize(own$+"TrayIcon.ico") < 1500
  MessageRequester("    Tray","icon (TrayIcon.ico) not found")
  End
EndIf

Global config_valid
Global sndwork
Global stop_supervise
Global supervise_run

Procedure CreateScreenshot()
  
  pic = GetClipboardImage(#PB_Any)
  
  If IsImage(pic) 
    
    If GetGadgetState(#AUTOAsk)
      If supervise_run
        If MessageRequester("    INFO","Detected Image in Clipboard"+Chr(13)+Chr(13)+"Auto Create Image ? (if you click NO, the Data in the Clipboard will be erased to)",#PB_MessageRequester_YesNo) = #PB_MessageRequester_No
          ClearClipboard()
          ProcedureReturn
        EndIf 
      EndIf
    EndIf
    
    If GetGadgetState(#PNG)
      fpattern$="png | *.png" : ext$=".png" : format=1
    EndIf 
    If GetGadgetState(#BMP)
      fpattern$="bmp | *.bmp" : ext$=".bmp" : format=2
    EndIf
    If GetGadgetState(#JPG)
      fpattern$="jpg | *.jpg" : ext$=".jpg" : format=3
    EndIf
    
    If GetGadgetState(#AskForName)
      
      fname$ = SaveFileRequester("Save",GetGadgetText(#DefFolderText),fpattern$,0)
      
      If fname$ 
        
        fp$=GetPathPart(fname$) : ff$=GetFilePart(fname$) 
        
        If FileSize(fname$) > 0
          If MessageRequester(" Overwrite",fname$,#PB_MessageRequester_YesNo) = #PB_MessageRequester_No
            ClearClipboard()
            ProcedureReturn 
          EndIf
        EndIf
        fname$=RemoveString(fname$,ext$,#PB_String_NoCase) 
        fname$=fname$+ext$
        
      Else
        ClearClipboard()
        ProcedureReturn
      EndIf 
      
    Else
      
      ff$=FormatDate("%yyyy-%mm-%dd -- %hh-%ii-%ss", Date()) 
      default_output$=GetGadgetText(#DefFolderText)
      
      If FileSize(default_output$) = -1
        default_output$=GetHomeDirectory() 
        SetGadgetText(#DefFolderText,default_output$)
        MessageRequester("    Error","Default Folder don´t exist, saved Image @ "+default_output$)
        ProcedureReturn
      EndIf
      
      fname$=default_output$+ff$+ext$ : fp$=default_output$
      
    EndIf 
    
    If format=1
      SaveImage(pic,fname$,#PB_ImagePlugin_PNG)
    ElseIf format=2
      SaveImage(pic,fname$,#PB_ImagePlugin_BMP,#Null,DesktopDepth(0))
    ElseIf format=3
      SaveImage(pic,fname$,#PB_ImagePlugin_JPEG,GetGadgetState(#TrackBar)+1) 
    EndIf 
    
    ClearClipboard()
    
    ff$=GetFilePart(fname$)
    
    If GetGadgetState(#MessageB) 
      MessageRequester("    OK","Saved as "+ff$+Chr(13)+Chr(13)+"@ "+fp$)
    Else
      If sndwork
        PlaySound(#Sound)
      EndIf
    EndIf
    
    If GetGadgetState(#OpenFolderAfterSave) 
      RunProgram("explorer.exe",Chr(34)+fp$+Chr(34),"")
    EndIf 
    
  EndIf 
  
EndProcedure

Procedure ThreadCreateScreenshot()
  
  pic = DoGetClipboardImage(#PB_Any)
  
  If IsImage(pic) 
    
    If GetGadgetState(#AUTOAsk)
      If supervise_run
        If DoMessageRequester("    INFO","Detected Image in Clipboard"+Chr(13)+Chr(13)+"Auto Create Image ? (if you click NO, the Data in the Clipboard will be erased to)",#PB_MessageRequester_YesNo) = #PB_MessageRequester_No
          DoClearClipboard()
          ProcedureReturn
        EndIf 
      EndIf
    EndIf
    
    If GetGadgetState(#PNG)
      fpattern$="png | *.png" : ext$=".png" : format=1
    EndIf 
    If GetGadgetState(#BMP)
      fpattern$="bmp | *.bmp" : ext$=".bmp" : format=2
    EndIf
    If GetGadgetState(#JPG)
      fpattern$="jpg | *.jpg" : ext$=".jpg" : format=3
    EndIf
    
    If GetGadgetState(#AskForName)
      
      fname$ = DoSaveFileRequester("Threaded Save",GetGadgetText(#DefFolderText),fpattern$,0)
      
      If fname$ 
        
        fp$=GetPathPart(fname$) : ff$=GetFilePart(fname$) 
        
        If FileSize(fname$) > 0
          If DoMessageRequester(" Overwrite",fname$,#PB_MessageRequester_YesNo) = #PB_MessageRequester_No
            DoClearClipboard()
            ProcedureReturn 
          EndIf
        EndIf
        fname$=RemoveString(fname$,ext$,#PB_String_NoCase) 
        fname$=fname$+ext$
        
      Else
        DoClearClipboard()
        ProcedureReturn
      EndIf 
      
    Else
      
      ff$=FormatDate("%yyyy-%mm-%dd -- %hh-%ii-%ss", Date()) 
      default_output$=GetGadgetText(#DefFolderText)
      
      If FileSize(default_output$) = -1
        default_output$=GetHomeDirectory() 
        DoSetGadgetText(#DefFolderText,default_output$)
        DoMessageRequester("    Error","Default Folder don´t exist, saved Image @ "+default_output$)
        ProcedureReturn
      EndIf
      
      fname$=default_output$+ff$+ext$ : fp$=default_output$
      
    EndIf 
    
    If format=1
      SaveImage(pic,fname$,#PB_ImagePlugin_PNG)
    ElseIf format=2
      SaveImage(pic,fname$,#PB_ImagePlugin_BMP,#Null,DesktopDepth(0))
    ElseIf format=3
      SaveImage(pic,fname$,#PB_ImagePlugin_JPEG,GetGadgetState(#TrackBar)+1) 
    EndIf 
    
    DoClearClipboard()
    
    ff$=GetFilePart(fname$)
    
    If GetGadgetState(#MessageB) 
      DoMessageRequester("    OK","Saved as "+ff$+Chr(13)+Chr(13)+"@ "+fp$)
    Else
      If sndwork
        PlaySound(#Sound)
      EndIf
    EndIf
    
    If GetGadgetState(#OpenFolderAfterSave) 
      RunProgram("explorer.exe",Chr(34)+fp$+Chr(34),"")
    EndIf 
    
  EndIf 
  
EndProcedure

Procedure SaveActiveSettings(Close)
  
  If CreatePreferences(own$+"TurboImageGrabber.ini") 
    
    WritePreferenceString("key","a/3j@kn30N*b3<$k#ja!l3k9L")
    
    xxx=GetGadgetState(#TrayOption)
    WritePreferenceLong("tray start",xxx) 
    
    xxx$=GetGadgetText(#DefFolderText)
    WritePreferenceString("default output",xxx$)
    
    If GetGadgetState(#PNG)
      WritePreferenceString("default format","0")
    EndIf
    If GetGadgetState(#BMP)
      WritePreferenceString("default format","1")
    EndIf
    If GetGadgetState(#JPG)
      WritePreferenceString("default format","2")
    EndIf
    
    If GetGadgetState(#AUTO)
      WritePreferenceString("supervise","1")
    EndIf
    
    If GetGadgetState(#AUTOAsk)
      WritePreferenceString("supervise_ask","1")
    EndIf
    
    xxx=GetGadgetState(#TrackBar)
    WritePreferenceLong("jpg compression",xxx) 
    
    xxx=GetGadgetState(#OpenFolderAfterSave)
    WritePreferenceLong("open target",xxx)
    
    xxx=GetGadgetState(#MessageB)
    WritePreferenceLong("save message",xxx)
    
    xxx=GetGadgetState(#AskForName)
    WritePreferenceLong("save as user input",xxx) 
    
    ClosePreferences()
    
    If Close
      End
    EndIf
    
  Else
    If Close
      If MessageRequester("    Error","Can´t Create/Save Preference File (maybe no System Right's)"+Chr(13)+Chr(13)+"Still close Turbo Image Grabber ?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
        End
      EndIf 
    Else
      MessageRequester("    Error","Can´t Create/Save Preference File (maybe no System Right's)") 
    EndIf 
  EndIf 
  
EndProcedure

Procedure WatchForClipBoardImage(bla)
  
  supervise_run=1
  
  Repeat
    If stop_supervise
      Break
    EndIf
    Delay(20)
    ThreadCreateScreenshot()  
  ForEver
  
  supervise_run=0 
  
EndProcedure

Procedure InitSettings()
  
  If config_valid = 0
    SetGadgetState(#PNG,1)
    SetGadgetState(#MessageB,1)
    SetGadgetState(#AskForName,1)
    default_output$=GetUserDirectory(#PB_Directory_Documents)
    SetGadgetText(#DefFolderText,default_output$)
  Else 
    default_output$ = ReadPreferenceString("default output",GetUserDirectory(#PB_Directory_Documents))
    If FileSize(default_output$) = -2
      SetGadgetText(#DefFolderText,default_output$)
    Else 
      default_output$=GetUserDirectory(#PB_Directory_Documents)
      SetGadgetText(#DefFolderText,default_output$) 
    EndIf 
    
    default_format = ReadPreferenceLong("default format",0)
    If default_format < 0 Or default_format > 2
      SetGadgetState(#PNG,1)
    Else
      If default_format = 0
        SetGadgetState(#PNG,1)
      ElseIf default_format = 1
        SetGadgetState(#BMP,1)
      ElseIf default_format = 2
        SetGadgetState(#JPG,1)        
      EndIf 
    EndIf 
    
    jpg_compression = ReadPreferenceLong("jpg compression",7)
    If jpg_compression < 0 Or jpg_compression > 10
      jpg_compression=7
    EndIf 
    SetGadgetState(#TrackBar,jpg_compression)
    
    save_message = ReadPreferenceLong("save message",0)
    If save_message < 0 Or save_message > 1
      SetGadgetState(#MessageB,0)
    Else
      SetGadgetState(#MessageB,save_message)
    EndIf
    
    open_target = ReadPreferenceLong("open target",0)
    If open_target < 0 Or open_target > 1
      SetGadgetState(#OpenFolderAfterSave,0)
    Else
      SetGadgetState(#OpenFolderAfterSave,open_target)
    EndIf 
    
    save_as_user_input = ReadPreferenceLong("save as user input",1)
    If save_as_user_input < 0 Or save_as_user_input > 1
      SetGadgetState(#AskForName,1)
    Else
      If save_as_user_input
        SetGadgetState(#AskForName,1) 
      Else
        SetGadgetState(#AskForName,0)  
        SetGadgetState(#UseDate,1) 
      EndIf 
    EndIf
    
    If ReadPreferenceLong("supervise_ask",0)
      SetGadgetState(#AUTOAsk,1)
    EndIf
    
    If ReadPreferenceLong("supervise",0)
      SetGadgetState(#AUTO,1)
      CreateThread(@WatchForClipBoardImage(),0) 
    EndIf
    
  EndIf
  
  ClosePreferences() 
  
EndProcedure

If FileSize(own$+"TurboImageGrabber.ini") = -1
  CreateDef=1 : default_output$=GetUserDirectory(#PB_Directory_Documents)
Else
  If OpenPreferences(own$+"TurboImageGrabber.ini")
    ini_key$ = ReadPreferenceString("key","")
    ini_key_chk = FindString(ini_key$,"a/3j@kn30N*b3<$k#ja!l3k9L",1)
    If ini_key_chk
      config_valid=1
    Else
      MessageRequester("    No","valid Turbo Image Grabber ini File found")
      config_valid=0
    EndIf
  EndIf
EndIf 

#window_kon1=#PB_Window_ScreenCentered|#PB_Window_SystemMenu 
#window_kon2=#PB_Window_Invisible|#PB_Window_ScreenCentered|#PB_Window_SystemMenu 

Title$=" Turbo Image Grabber"
bla=309

If config_valid = 0
  OpenWindow(#MainWin, 100, 150, 255,bla,Title$,#window_kon1) 
Else
  open_in_tray = ReadPreferenceLong("tray start",0)
  If open_in_tray < 0 Or open_in_tray > 1
    OpenWindow(#MainWin, 100, 150, 255,bla,Title$,#window_kon1) 
  Else
    If open_in_tray = 0
      OpenWindow(#MainWin, 100, 150, 255,bla,Title$,#window_kon1) 
    ElseIf open_in_tray = 1
      OpenWindow(#MainWin, 100, 150, 255,bla,Title$,#window_kon2) 
    EndIf
  EndIf 
EndIf 

;AddSysTrayIcon(#TrayIcon,WindowID(#MainWin), LoadImage(#IMG, own$+"TrayIcon.ico"))
AddSysTrayIcon(#TrayIcon,WindowID(#MainWin), CreateImage(#IMG, 16, 16, 32, $0000FF)); LoadImage(#IMG, own$+"TrayIcon.ico"))

UseJPEGImageEncoder() : UsePNGImageEncoder()

If InitSound()
  UseOGGSoundDecoder()
  If LoadSound(#Sound,own$+"krapkrap.ogg")
    sndwork=1
  EndIf 
EndIf 

ButtonGadget(#CloseB,195,10,50,60,"Close Turbo Image Grabber",#PB_Button_MultiLine)
ButtonGadget(#MinimizeB,130,10,50,60,"Minimize Turbo Image Grabber",#PB_Button_MultiLine)

OptionGadget(#PNG,10,10,80,20,"Save as png")
OptionGadget(#BMP,10,30,85,20,"Save as bmp")
OptionGadget(#JPG,10,50,80,20,"Save as jpg")

TrackBarGadget(#TrackBar,5,81,245,10,0,10,#PB_TrackBar_Ticks) 
SetGadgetState(#TrackBar,7)

CheckBoxGadget(#TrayOption,10,100,80,20,"Open in Tray")

If open_in_tray = 1
  SetGadgetState(#TrayOption,1)
EndIf

CheckBoxGadget(#MessageB,10,120,115,20,"Message after Save")
SetGadgetState(#MessageB,1) 

CheckBoxGadget(#OpenFolderAfterSave,10,140,170,20,"Open Target folder after Saving")

CheckBoxGadget(#AskForName,10,160,110,20,"Ask for Save Name")
SetGadgetState(#AskForName,1)

CheckBoxGadget(#UseDate,10,180,165,20,"Use Date+Time as File Names") 
ButtonGadget(#SetDefFolder,10,206,235,20,"Set Standard Output Folder") 
StringGadget(#DefFolderText,10,235,235,20,default_output$,#PB_String_ReadOnly)  

CheckBoxGadget(#AUTO,10,260,215,20,"Auto Create Image  |  Supervise Clipboard")
CheckBoxGadget(#AUTOAsk,10,280,225,20,"Ask before Auto Create @ Supervise Mode")

If CreateDef
  SaveActiveSettings(0) : InitSettings()  
Else
  InitSettings()  
EndIf 

ExamineDesktops() 

ThreadToGUI::BindEventGUI(#My_Event_ThreadToGUI)

Repeat 
  
  WindowEvent = WaitWindowEvent() : EventGadget = EventGadget()
  
  If WindowEvent = #PB_Event_SysTray
    
    If EventType() = #PB_EventType_LeftClick 
      CreateScreenshot() : SaveActiveSettings(0) 
    EndIf
    
    If EventType() = #PB_EventType_LeftDoubleClick
      HideWindow(#MainWin,0) : SetActiveWindow(#MainWin) : SaveActiveSettings(0) 
    EndIf
    
    If EventType() = #PB_EventType_RightDoubleClick
      If MessageRequester("    Close Turbo Image Grabber","Are you sure ?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
        SaveActiveSettings(1)
      EndIf
    EndIf 
  EndIf
  
  If WindowEvent = #PB_Event_Gadget
    
    If EventGadget = #CloseB 
      If MessageRequester("    Close Turbo Image Grabber","Are you sure ?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
        SaveActiveSettings(1)
      EndIf 
    EndIf
    
    If EventGadget = #MinimizeB
      CreateScreenshot() : HideWindow(#MainWin,1) : SaveActiveSettings(0) 
    EndIf
    
    If EventGadget = #AskForName
      If GetGadgetState(#AskForName)
        SetGadgetState(#AskForName,1) : SetGadgetState(#UseDate,0) 
      Else
        SetGadgetState(#AskForName,0) : SetGadgetState(#UseDate,1)
      EndIf
    EndIf
    
    If EventGadget = #UseDate
      If GetGadgetState(#UseDate)
        SetGadgetState(#UseDate,1) : SetGadgetState(#AskForName,0) 
      Else
        SetGadgetState(#UseDate,0) : SetGadgetState(#AskForName,1)
      EndIf 
    EndIf 
    
    If EventGadget = #AUTO
      If GetGadgetState(#AUTO)
        stop_supervise=0
        CreateThread(@WatchForClipBoardImage(),0) : SetGadgetState(#AUTO,1)
      Else
        SetGadgetState(#AUTO,0) : stop_supervise=1 
      EndIf 
    EndIf
    
    If EventGadget = #SetDefFolder
      If FileSize(default_output$) <> -2
        default_output$=GetUserDirectory(#PB_Directory_Documents)
      EndIf 
      default_output$=PathRequester("Choose Default Output Path",default_output$)
      If default_output$
        SetGadgetText(#DefFolderText,default_output$)
        SaveActiveSettings(0)
      EndIf 
    EndIf
    
  EndIf
  
  If WindowEvent = #PB_Event_CloseWindow
    CreateScreenShot()
    HideWindow(#MainWin,1)
    SaveActiveSettings(0) 
  EndIf 
  
ForEver 
Habe ein paar Sachen zum testen ausgeklammert
Hab den Code genommen den du zuvor geposted hattest (und dazu die aktuellste Modul Version von dir) also bevor
Edit Läuft schon mal grob unter Linux. SysTray geht nicht
und bevor
Habe ein paar Sachen zum testen ausgeklammert
Und den soweit an Linux angepasst gehabt (c:\ durch ~/ ersetzt, Fenster Breite deutlich breiter gemacht, weil irgendwie die Buttons riesig sind und nicht reinpassen)

Alles lief gut, auch im Tray, aber der Debugger gibt eine Warnung raus wenn der SuperVise Thread läuft, und dann was im Clipboard ist.

Debugger gibt Line 381 von Modul_ThreadToGui.pb

als Fehlerquelle aus

Code: Alles auswählen

                \Result = MessageRequester(\Text, \Text2, \Param1)
wenn Date & Time als Dateiname benutzt wird, und Zeile 385 falls nicht.

Trotz Warnmeldung erscheint der ThreadedSaveRequester, mann speichert und direkt danach kommt ein Fehler der sich auf Zeile 80 von meinem Code bezieht, dann Zeile 129 von meinem Code, und es erscheint noch mal der normale SaveFileRequester, danach kommt 381.

EDIT:

Also dein Code funzt, es kommt nur erst 385 danach 381.

Das 2 x der SaveFileRequester vorkamm, und auch mein Code aus Zeile 80 & 129 ausführt wurde, lag daran das alles durcheinander gekommen ist, weil im Hintergrund das Tool noch mal lief (hab es vergessen gehabt auszuschalten :lol: )

EDIT 2:

Hab es trotz der Meldungen in Zeile 381 & 385 compiliert und erfolgreich unter Linux gestestet :allright:
alles geht, nur der Ram Verbrauch unter Linux ist immer noch utopisch.
Zuletzt geändert von GlassJoe am 28.06.2017 00:37, insgesamt 1-mal geändert.
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Tool friert ein, nach verlassen von Schleife in Thread

Beitrag von mk-soft »

Noch einmal das Modul aktualisieren. (v1.13)

Bei DoMessageRequester war der letzte Parameter noch nicht Optional...
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
GlassJoe
Beiträge: 108
Registriert: 11.06.2017 20:25
Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400

Re: Tool friert ein, nach verlassen von Schleife in Thread

Beitrag von GlassJoe »

mk-soft hat geschrieben:Noch einmal das Modul aktualisieren. (v1.13)

Bei DoMessageRequester war der letzte Parameter noch nicht Optional...
Also es funzt unter Linux, im Thread mit Tray (hab eine executable basteln lassen und die dann ausgeführt) alles in Ordnung, nur schmeist der Editor immer ne Meldung raus das irgenwas mit Zeile 385 & 381 wäre.
Aber wie gesagt es funzt einwandfrei :allright: der Editor meckert nur sehr gerne wie ich sehe, z.B regt der sich auf weil die ogg datei in Zeile 433 nicht gefunden wird, ich weiss jetzt nicht wie es unter dem normalen Windoof PB Editor ist, aber unter japbe wäre sowas egal.

Code: Alles auswählen

  If InitSound()
    UseOGGSoundDecoder()
    If LoadSound(#Sound,own$+"krapkrap.ogg")
      sndwork=1
    EndIf
  EndIf
Das würde einfach ignoriert werden.

EDIT:

jaPBe ignoriert es auch nicht :lol: meckert auch rum weil die Datei nicht gefunden wird wenn ich die ogg Datei umbenenne......dabei ist es durch eigentlich Wurscht ob die Datei jetzt gefunden wird oder nicht, schliesslich steht da ja

If Loadsound

:)
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Tool friert ein, nach verlassen von Schleife in Thread

Beitrag von mk-soft »

Es reicht auch alles 100ms 'Delay(100)' das Clipboard abzufragen.

Wichtig ist auch das erst der Thread beendet wird vorm schliessen des Fensters und beenden der Event-Schleife, da sonst der Thread hängen bleibt.

Warum:
Der Thread sendet über PostEvent eine Anfrage an den Mainscope und wartet auf eine Anwort 'Semaphore'.
Die Anfrage wird aber erst bei einen Aufruf von WaitWindowEvent() verarbeitet.

Schau dir mal PostEvent und BindEvent in der Hilfe an.

P.S. Neue Version von ThreadToGUI online. (v1.14)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
GlassJoe
Beiträge: 108
Registriert: 11.06.2017 20:25
Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400

Re: Tool friert ein, nach verlassen von Schleife in Thread

Beitrag von GlassJoe »

mk-soft hat geschrieben:Es reicht auch alles 100ms 'Delay(100)' das Clipboard abzufragen.

Wichtig ist auch das erst der Thread beendet wird vorm schliessen des Fensters und beenden der Event-Schleife, da sonst der Thread hängen bleibt.

Warum:
Der Thread sendet über PostEvent eine Anfrage an den Mainscope und wartet auf eine Anwort 'Semaphore'.
Die Anfrage wird aber erst bei einen Aufruf von WaitWindowEvent() verarbeitet.

Schau dir mal PostEvent und BindEvent in der Hilfe an.

P.S. Neue Version von ThreadToGUI online. (v1.14)
Aber ist es nicht so das Threads abgetötet werden wenn das Main Prog schon zu ist ?
Dachte immer das wäre so.

Yop werde mir das reinziehen ist bestimmt nützlich, ich muss sehr oft mit Events die an andere Fenster gesendet werden arbeiten, und hasse ToolWindows (weil die bescheuerten Dinger so unflexibel sind, und nicht als eigenes Ding in der Taskleiste erscheinen)

Was ich noch anmerklen wollte der Ram Verbrauch unter Linux ist doch nicht

23/57MB !

So steht es nur in den Task Zeilen vom Taskmanager, wenn ich das Tool schliesse steht oben rechts im LXTask Taskmanager auf einmal 99 MB von 768 benutzt, wenn es läuft steht dort 103 MB von 768 benutzt.

Also alles OK, bis auf die verwirrende Anzeige der lxde & xfce Taskmanager
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Tool friert ein, nach verlassen von Schleife in Thread

Beitrag von mk-soft »

Aber ist es nicht so das Threads abgetötet werden wenn das Main Prog schon zu ist ?
Dachte immer das wäre so.
Ist so. Aber beendet man so schmutzig ein Programm?
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Tool friert ein, nach verlassen von Schleife in Thread

Beitrag von ccode_new »

mk-soft hat geschrieben:Zitat:
Aber ist es nicht so das Threads abgetötet werden wenn das Main Prog schon zu ist ?
Dachte immer das wäre so.


Ist so. Aber beendet man so schmutzig ein Programm?
Warum nicht ?

Man macht doch sonst nur nochmal das selbe.
Es ist doch gut, wenn PureBasic das schon für dich macht.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Tool friert ein, nach verlassen von Schleife in Thread

Beitrag von mk-soft »

Da sollte man sich schon Gedanken machen.

Es wird einfach irgendwo im Ablauf des Threads abgebrochen. Je nach dem was man macht kann es zu unerwarteten ergebnis führen.
Datei nur zur hälfte gesichert, Bilder nicht bis zum ende bearbeitet, Datenbanken inkonsistent, etc.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten