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
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

Tool friert ein, nach verlassen von Schleife in Thread

Beitrag von GlassJoe »

Hi

Also bevor weiter das Thema im Allgemein Forum völlig Offtopic gebracht wird mit dem Problem
das ich mit dem Code unter Linux hab, poste ich den Code halt hier :)

Hier die Windows Version vom Code. CPU Last praktisch nicht existent, Ram Verbrauch unter 32Bit OS 2-3MB, ich benutze das Tool so schon seit 8 Jahren, ohne jegliche Probleme.

Bitte Threadsafe aktivieren !

Code: Alles auswählen

  Enumeration
    #MainWin
    #CloseB
    #MinimizeB
    #PNG
    #BMP
    #JPG
    #TrackBar
    #TrayOption
    #MessageB
    #OpenFolderAfterSave
    #AskForName
    #UseDate
    #SetDefFolder
    #DefFolderText
    #TrayIcon
    #IMG
    #Sound
    #AUTO
    #AUTOAsk
  EndEnumeration
  
  own$=GetCurrentDirectory()
  
  If CountString(own$,"\") < 2
    MessageRequester("    Put me","in a Folder and start me again",#MB_OK)
    End 
  EndIf
  
  If FileSize(own$+"TrayIcon.ico") < 1500
    MessageRequester("    Tray","icon (TrayIcon.ico) not found",#MB_OK)
    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$,#MB_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$,#MB_OK)
          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$,#MB_OK)
      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)",#MB_OK) 
      EndIf 
    EndIf 
    
  EndProcedure
  
  Procedure WatchForClipBoardImage(bla)
    
    supervise_run=1
    
    Repeat
      If stop_supervise
        Break
      EndIf
      Delay(5)
      CreateScreenshot()  
    ForEver
    
    supervise_run=0 
    
  EndProcedure
  
  Procedure InitSettings()
    
    If config_valid = 0
      SetGadgetState(#PNG,1)
      SetGadgetState(#MessageB,1)
      SetGadgetState(#AskForName,1)
      default_output$="C:\"
      SetGadgetText(#DefFolderText,default_output$)
    Else 
      default_output$ = ReadPreferenceString("default output","C:\")
      If FileSize(default_output$) = -2
        SetGadgetText(#DefFolderText,default_output$)
      Else 
        default_output$="C:\"
        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$="C:\"
  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",#MB_OK)
        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"))
  
  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() 
  
  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 ?",#MB_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 ?",#MB_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$="C:\"
        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 






Jetzt der angepasste Code unter Linux (benutze Debian 8 Jessie, xfce, gtk)

Auch hier Bitte Threadsafe aktivieren.

Code: Alles auswählen

  Enumeration
    #MainWin
    #CloseB
    #MinimizeB
    #PNG
    #BMP
    #JPG
    #TrackBar
    #TrayOption
    #MessageB
    #OpenFolderAfterSave
    #AskForName
    #UseDate
    #SetDefFolder
    #DefFolderText
    #TrayIcon
    #IMG
    #Sound
    #AUTO
    #AUTOAsk
  EndEnumeration
  
  own$=GetCurrentDirectory()
  
  If CountString(own$,"/") < 2
    MessageRequester("    Put me","in a extra Folder and start me again",#PB_MessageRequester_Ok)
    End 
  EndIf
  
  If FileSize(own$+"trayicon.png") < 650
    MessageRequester("    Tray","icon (trayicon.png) not found",#PB_MessageRequester_Ok)
    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$,#PB_MessageRequester_Ok)
          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$,#PB_MessageRequester_Ok)
      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)",#PB_MessageRequester_Ok) 
      EndIf 
    EndIf 
    
  EndProcedure
  
  Procedure WatchForClipBoardImage(bla)
    
    supervise_run=1
    
    Repeat
      If stop_supervise
        Break
      EndIf
      Delay(500)
      CreateScreenShot()  
    ForEver
    
    supervise_run=0 
    
  EndProcedure
  
  Procedure InitSettings()
    
    If config_valid = 0
      SetGadgetState(#PNG,1)
      SetGadgetState(#MessageB,1)
      SetGadgetState(#AskForName,1)
      default_output$="~/"
      SetGadgetText(#DefFolderText,default_output$)
    Else 
      default_output$ = ReadPreferenceString("default output","~/")
      If FileSize(default_output$) = -2
        SetGadgetText(#DefFolderText,default_output$)
      Else 
        default_output$="~/"
        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$="~/"
  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",#PB_MessageRequester_Ok)
        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"
  ;bla1=255 anscheinend sind unter Linux Pixel anders, das fenster ist bei Selber Monitor Auflösung
  ;deutlich größer als unter Windows mit selber Auflösung
  bla1=350
  ;bla2=309
  bla2=350
  
  If config_valid = 0
    OpenWindow(#MainWin, 100, 150,bla1,bla2,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,bla1,bla2,title$,#window_kon1) 
    Else
      If open_in_tray = 0
        OpenWindow(#MainWin, 100, 150,bla1,bla2,title$,#window_kon1) 
      ElseIf open_in_tray = 1
        OpenWindow(#MainWin, 100, 150,bla1,bla2,title$,#window_kon2) 
      EndIf
    EndIf 
  EndIf 
  
  UseJPEGImageEncoder() : UsePNGImageEncoder() : UsePNGImageDecoder()

  AddSysTrayIcon(#TrayIcon,WindowID(#MainWin),LoadImage(#IMG,own$+"trayicon.png"))
 
  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() 
  
  Repeat
    
    WindowEvent = WaitWindowEvent()
    
    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
      
      EventGadget = EventGadget()
      
      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$="~/"
        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 
Sobald unter Linux die Prozedure WatchForClipBoardImage verlassen wird (Checkbox mit Text Auto Create Image | Supervice Clipboard) durch auslösen von einem Break, weil stop_supervise gleich 1 ist, wird das komplette Tool eingefroren, es gibt auch keine Meldung im Debugger was los ist.

Ich bin völlig überfragt !

1) Wieso so ein abartiger Ram Verbrauch im Vergleich zu Windoof ?
2) Wieso reicht bei Windoof Delay(5) und bei Werten unter 50 krieg ich massive GTK Fehlermeldungen ?
3) Wieso ist die CPU Auslastung praktisch nicht existent, wie unter Windoof ?
4) Warum friert es ein, weil so etwas banales passiert, wie das verlassen einer Schleife die in einem Thread ist ?
5) Was soll diese komische Meldung wenn mann das Tool beendet ?

Code: Alles auswählen

[14:11:04] [WARNING] Gtk (MESSAGE): GtkDialog mapped without a transient parent. This is discouraged.
[14:11:12] Die Programmausführung ist abgeschlossen.
6) Wieso ist das Fenster vom Tool riesig unter Linux (Xfce unter 1024x768), wenn ich eine Fentergröße
von 255W hab und 309H, und unter Windows ist es unter 1024x768, schön kompakt wie es sein soll.

Ja das die Default Font Schriftgrößen unter Xfce anders sind, daß ergibt ja noch Sinn, aber das ein Fenster extrem groß im Vergleich ist, daß versteh ich wirklich nicht.

Ein Pixel bleibt doch noch immer ein Pixel oder nicht ?

Da ich keine Anhang Funktion gefunden hab, hab ich die TrayIcons (einmal als png für Linux, und einmal als ico für Windoof) und das ogg Sound File gezippz und hier hochgeladen.

http://www27.zippyshare.com/v/VLtQqRMD/file.html
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
matbal
Beiträge: 246
Registriert: 30.03.2011 20:53

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

Beitrag von matbal »

Ich habe dein Programm jetzt auch mal unter Linux ausprobiert. Wie es aussieht, hängt sich das Programm auf, wenn GetClipboardImage() im Thread läuft bzw. lief. Mit AddWindowTimer() kannst du dieses Problem leicht umgehen.

Das Fenster selber ist bei mir genauso groß wie unter Windows, allerdings habe ich KDE.

Unter gtk3 gibt es aber noch ein Problem mit dem TrayIcon, Es wird nur der Linksklick ausgewertet und ich kann das Programm nicht mehr beenden. Wenn ich auf gtk2 umstelle, gibt es das Problem nicht.

Der Speicherverbrauch ohne Debugger ist bei mir auch OK. Nach Programmstart knapp 3 MB und steigt auf 8 MB, sobald Bilder da sind. Bei deiner Umsetztung steigt der Speicherverbrauch bei jedem Bild, da du in der CreateScreenShot-Prozedur FreeImage() vergessen hast.


Code: Alles auswählen

Enumeration
    #MainWin
    #CloseB
    #MinimizeB
    #PNG
    #BMP
    #JPG
    #TrackBar
    #TrayOption
    #MessageB
    #OpenFolderAfterSave
    #AskForName
    #UseDate
    #SetDefFolder
    #DefFolderText
    #TrayIcon
    #IMG
    #Sound
    #AUTO
    #AUTOAsk
  EndEnumeration
  
  own$=GetCurrentDirectory()
  
  If CountString(own$,"/") < 2
    MessageRequester("    Put me","in a extra Folder and start me again",#PB_MessageRequester_Ok)
    End 
  EndIf
  
  If FileSize(own$+"trayicon.png") < 650
    MessageRequester("    Tray","icon (trayicon.png) not found",#PB_MessageRequester_Ok)
    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$,#PB_MessageRequester_Ok)
          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$,#PB_MessageRequester_Ok)
      Else
        If sndwork
          PlaySound(#Sound)
        EndIf
      EndIf
      
      If GetGadgetState(#OpenFolderAfterSave) 
        RunProgram("explorer.exe",Chr(34)+fp$+Chr(34),"")
      EndIf 
      FreeImage(pic)
    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)",#PB_MessageRequester_Ok) 
      EndIf 
    EndIf 
    
  EndProcedure
  
  Procedure WatchForClipBoardImage(bla)
    Debug "THREAD GESTARTET"
    supervise_run=1
    
    Repeat
      If stop_supervise
        Break
      EndIf
      Delay(500)
      CreateScreenShot()
      ; GetClipboardImage(0)
      If IsImage(0) 
         FreeImage(0)
      EndIf
      
    ForEver
    
    supervise_run=0 
    Debug "THREAD BEENDET"
  EndProcedure
  
  Procedure InitSettings()
    
    If config_valid = 0
      SetGadgetState(#PNG,1)
      SetGadgetState(#MessageB,1)
      SetGadgetState(#AskForName,1)
      default_output$="~/"
      SetGadgetText(#DefFolderText,default_output$)
    Else 
      default_output$ = ReadPreferenceString("default output","~/")
      If FileSize(default_output$) = -2
        SetGadgetText(#DefFolderText,default_output$)
      Else 
        default_output$="~/"
        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) 
        AddWindowTimer(#MainWin, 1, 100)
      EndIf
      
    EndIf
    
    ClosePreferences() 
    
  EndProcedure
  
  If FileSize(own$+"TurboImageGrabber.ini") = -1
    CreateDef=1 : default_output$="~/"
  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",#PB_MessageRequester_Ok)
        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"
  ;bla1=255 anscheinend sind unter Linux Pixel anders, das fenster ist bei Selber Monitor Auflösung
  ;deutlich größer als unter Windows mit selber Auflösung
  bla1=350
  ;bla2=309
  bla2=350
  
  If config_valid = 0
    OpenWindow(#MainWin, 100, 150,bla1,bla2,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,bla1,bla2,title$,#window_kon1) 
    Else
      If open_in_tray = 0
        OpenWindow(#MainWin, 100, 150,bla1,bla2,title$,#window_kon1) 
      ElseIf open_in_tray = 1
        OpenWindow(#MainWin, 100, 150,bla1,bla2,title$,#window_kon2) 
      EndIf
    EndIf 
  EndIf 
  
  UseJPEGImageEncoder() : UsePNGImageEncoder() : UsePNGImageDecoder()

  AddSysTrayIcon(#TrayIcon,WindowID(#MainWin),LoadImage(#IMG,own$+"trayicon.png"))
 
  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() 
  
  Repeat
    
    WindowEvent = WaitWindowEvent()
    
    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
      
      EventGadget = EventGadget()
      
      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)
          AddWindowTimer(#MainWin, 1, 100)
        Else
           RemoveWindowTimer(#MainWin, 1)
           SetGadgetState(#AUTO,0) : stop_supervise=1 
        EndIf 
      EndIf
      
      If EventGadget = #SetDefFolder
        If FileSize(default_output$) <> -2
          default_output$="~/"
        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_Timer
       If EventTimer() = 1
          CreateScreenShot()
       EndIf
    EndIf
    
    
    If WindowEvent = #PB_Event_CloseWindow
       
      CreateScreenShot() :  HideWindow(#MainWin,1) : SaveActiveSettings(0) 
    EndIf 
    
    
    
  ForEver
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 »

Huhu!!!

Du solltest meine Tipps schon befolgen.
GetClipBoard() nutzt eine Api-Funktion unter Linux die nicht für externe Threads geeignet ist.

So funktionierts:

Code: Alles auswählen

Enumeration
    #MainWin
    #CloseB
    #MinimizeB
    #PNG
    #BMP
    #JPG
    #TrackBar
    #TrayOption
    #MessageB
    #OpenFolderAfterSave
    #AskForName
    #UseDate
    #SetDefFolder
    #DefFolderText
    #TrayIcon
    #IMG
    #Sound
    #AUTO
    #AUTOAsk
  EndEnumeration
 
  own$=GetCurrentDirectory()
 
  If CountString(own$,"/") < 2
    MessageRequester("    Put me","in a extra Folder and start me again",#PB_MessageRequester_Ok)
    End
  EndIf
 
  If FileSize(own$+"trayicon.png") = -1
    MessageRequester("    Tray","icon (trayicon.png) not found",#PB_MessageRequester_Ok)
    End
  EndIf
 
  Global config_valid
  Global sndwork
  Global stop_supervise
  Global supervise_run
  Global screenshot.b = 0
 
  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$,#PB_MessageRequester_Ok)
          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$,#PB_MessageRequester_Ok)
      Else
        If sndwork
          PlaySound(#Sound)
        EndIf
      EndIf
     
      If GetGadgetState(#OpenFolderAfterSave)
        RunProgram("explorer.exe",Chr(34)+fp$+Chr(34),"")
      EndIf
      FreeImage(pic)
    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)",#PB_MessageRequester_Ok)
      EndIf
    EndIf
   
  EndProcedure
 
  Procedure WatchForClipBoardImage(bla)
   
    supervise_run=1
   
    Repeat
      If stop_supervise
        Break
      EndIf
      Delay(500)
      screenshot = 1
    ForEver
    Delay(20)
    supervise_run=0
   
  EndProcedure
 
  Procedure InitSettings()
   
    If config_valid = 0
      SetGadgetState(#PNG,1)
      SetGadgetState(#MessageB,1)
      SetGadgetState(#AskForName,1)
      default_output$="~/"
      SetGadgetText(#DefFolderText,default_output$)
    Else
      default_output$ = ReadPreferenceString("default output","~/")
      If FileSize(default_output$) = -2
        SetGadgetText(#DefFolderText,default_output$)
      Else
        default_output$="~/"
        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$="~/"
  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",#PB_MessageRequester_Ok)
        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"
  ;bla1=255 anscheinend sind unter Linux Pixel anders, das fenster ist bei Selber Monitor Auflösung
  ;deutlich größer als unter Windows mit selber Auflösung
  bla1=350
  ;bla2=309
  bla2=350
 
  If config_valid = 0
    OpenWindow(#MainWin, 100, 150,bla1,bla2,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,bla1,bla2,title$,#window_kon1)
    Else
      If open_in_tray = 0
        OpenWindow(#MainWin, 100, 150,bla1,bla2,title$,#window_kon1)
      ElseIf open_in_tray = 1
        OpenWindow(#MainWin, 100, 150,bla1,bla2,title$,#window_kon2)
      EndIf
    EndIf
  EndIf
 
  UseJPEGImageEncoder() : UsePNGImageEncoder() : UsePNGImageDecoder()

  AddSysTrayIcon(#TrayIcon,WindowID(#MainWin),LoadImage(#IMG,own$+"trayicon.png"))
 
  ;If InitSound()
   ; UseOGGSoundDecoder()
    ;If LoadSound(#Sound,own$+"krapkrap.ogg")
     ; sndwork=1
    ;EndIf
  ;EndIf
 
  ButtonGadget(#CloseB,240,10,100,30,"Close Turbo Image Grabber",#PB_Button_MultiLine)
  ButtonGadget(#MinimizeB,130,10,100,30,"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()
 
  Repeat
   
    WindowEvent = WaitWindowEvent()
   
    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
     
      EventGadget = EventGadget()
     
      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$="~/"
        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
    
    If screenshot = 1
      CreateScreenShot()
      screenshot = 0
    EndIf
   
  ForEver 
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
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 »

ccode_new hat geschrieben:;bla1=255 anscheinend sind unter Linux Pixel anders, das fenster ist bei Selber Monitor Auflösung
;deutlich größer als unter Windows mit selber Auflösung
bla1=350
;bla2=309
bla2=350
Das liegt an der eingestellten DPI.

DPI: dots per inch, eine Maßeinheit für die Auflösung im Druck und anderen Wiedergabesystemen
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
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 »

ccode_new hat geschrieben:5) Was soll diese komische Meldung wenn mann das Tool beendet ?

Code:
[14:11:04] [WARNING] Gtk (MESSAGE): GtkDialog mapped without a transient parent. This is discouraged.
[14:11:12] Die Programmausführung ist abgeschlossen.
Bei Verwendung des "gtk-Toolkit" hast du bei einigen Funktionen (die einen auftauchenden Dialog öffnen) die Möglichkeit ein übergeordnetes Fenster anzugeben.
Dieser Flag(Bit) hift den Fenstermanger den Dialog und die Hauptfenster synchron zu halten und hält das Dialogfeld oben.
Es ist nur eine Warnung und kann ignoriert werden.

Hier wurde wohl "PB-Funktions-Intern" unter C/Asm kein Elterfenster angegeben.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
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 »

@matbal

Danke der Code geht soweit, musste nur noch schnell eine Kleinigkeit anpassen, sonst wurde die Variable supervise_run das von "Ask before Auto Create @ Supervise Mode" gesetzt wird nicht beim Programm Start (beim Auswerten der ini datei) gesetzt.

Ja stimmt ich hab FreeImage vergessen, ist halt die Macht der Gewohnheit unter Windoof :lol: da das alte Image sowieso überschrieben wird, dachte ich mir dabei nichts.

Und irgendwie ergibt das auch Sinn, wenn es irgendwie nicht überschrieben wird unter Linux und der Verbrauch steigt.

Was ich aber nicht verstehe, ich hab schon direkt nach dem Start vom Tool 23,7MB unter der RSS (keine Ahnung was das ist) Spalte und 57MB unter der Speicher Spalte.

Hab den LXTask Taskmanager.

@ccode_new

Ja das werde ich schon tun keine Frage :) Ich wollte nur verstehen wo das Problem mit dem Thread ist.
Ich hab so viel Tools die mit Threads arbeiten, daß es für mich kein Coden unter Linux geben kann, wenn ein Delay in einem Thread so viel Ärger verursacht, aber wie mir Dank eurer Hilfe klar wurde, ist es einfach nur die GetClipboardImage() Funktion von Linux Ärger macht in Threads.

Das mit den DPI ergibt Sinn, jedoch wollte ich sie auf Default Xfxe Settings belassen, da ich nicht Wissen kann welche DPI andere verwenden, und nicht auch noch einen Auto Resize Code für das Layout & die Schriften rein klatschen will (hab sowas auch noch nie gemacht :lol: fixed resolution oder minimiert reichte bisher immer)

Übrigens gibt es eine Möglichkeit einfach einen Default Font für alle Gadgets im Tool zu setzen ?

EDIT:

Screeny mit Ram Verbrauch

Bild

Direkt nach dem Programm Start, erst hab ich es unter VirtualBox getestet, dann auf einem der Lappis (Screenshot ist vom Lappi) kein Unterschied beim Ram Verbrauch.

FreeImage wurde benuzt, und die GetClipboardImage() Funktion läuft nicht in einem Thread.
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
matbal
Beiträge: 246
Registriert: 30.03.2011 20:53

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

Beitrag von matbal »

GlassJoe hat geschrieben:@matbalJa stimmt ich hab FreeImage vergessen, ist halt die Macht der Gewohnheit unter Windoof :lol: da das alte Image sowieso überschrieben wird, dachte ich mir dabei nichts.
Nur mit Konstanten werden die Objekte wiederbenutzt. Mit #Pb_Any wird jedes Mal ein neues Objekt mit neuer Nummer erstellt.
GlassJoe hat geschrieben:Was ich aber nicht verstehe, ich hab schon direkt nach dem Start vom Tool 23,7MB unter der RSS (keine Ahnung was das ist) Spalte und 57MB unter der Speicher Spalte.
Mit oder ohne Debugger?
Im KDE-Systemmonitor wird zwischen "Speicher" und "Gemeinsamer Speicher" unterschieden.

EDIT: Ich habe gerade dein Edit gesehen. Von der IDE mit Debugger war der Speicher bei mir ähnlich hoch. Das fertige Kompilat enthält die Debuginformationen nicht mehr, damit sinkt dann auch der Speicherverbrauch.
GlassJoe hat geschrieben:Übrigens gibt es eine Möglichkeit einfach einen Default Font für alle Gadgets im Tool zu setzen ?
Ja,

Code: Alles auswählen

SetGadgetFont(#Pb_Default, FontID)
aufrufen, bevor die Gadgets erstellt werden.
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 »

matbal hat geschrieben:
GlassJoe hat geschrieben:@matbalJa stimmt ich hab FreeImage vergessen, ist halt die Macht der Gewohnheit unter Windoof :lol: da das alte Image sowieso überschrieben wird, dachte ich mir dabei nichts.
Nur mit Konstanten werden die Objekte wiederbenutzt. Mit #Pb_Any wird jedes Mal ein neues Objekt mit neuer Nummer erstellt.
GlassJoe hat geschrieben:Was ich aber nicht verstehe, ich hab schon direkt nach dem Start vom Tool 23,7MB unter der RSS (keine Ahnung was das ist) Spalte und 57MB unter der Speicher Spalte.
Mit oder ohne Debugger?
Im KDE-Systemmonitor wird zwischen "Speicher" und "Gemeinsamer Speicher" unterschieden.

EDIT: Ich habe gerade dein Edit gesehen. Von der IDE mit Debugger war der Speicher bei mir ähnlich hoch. Das fertige Kompilat enthält die Debuginformationen nicht mehr, damit sinkt dann auch der Speicherverbrauch.
GlassJoe hat geschrieben:Übrigens gibt es eine Möglichkeit einfach einen Default Font für alle Gadgets im Tool zu setzen ?
Ja,

Code: Alles auswählen

SetGadgetFont(#Pb_Default, FontID)
aufrufen, bevor die Gadgets erstellt werden.
Zu 1)
Ach soooooooo :oops: ich hab das nicht gewusst :o Ich dachte weil ich #PB_Any benutze aber immer den die Variable "Pic" benutze wird die automatisch überschrieben, und das alte freigegeben.

Liege ich mit der Vermutung richtig das die Variable "Pic" schon überschrieben wird, aber es danach noch altes ungenutzes Image Handle gibt ? :shock:

Zu 2)
Macht keine Unterschied bei mir. Auf dem Screeny hatte ich die executable laufen.
Egal auf welchem Lappy (hab es jetzt erst mal auf 2 gestestet) es ist leider immer das selbe Spiel.
23 & 57MB

Speicher und gemeinsamer Speicher ? :freak: so eine Art Swap Speicher wie bei Windoof ?

Zu 3)
Danke :praise: ich hab gewusst das ich das mal irgendwo gesehen hatte, habs aber einfach nicht mehr finden können.
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 »

Habe mein Modul ThreadToGUI mit Clipboard Funktionen erweitert.

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

Auch mal das Beispiel mit SendEvent anschauen um aus einen Thread eine MessageRequester anzufordern.

Teste gerade mal ein Dein Programm. Gute Idee :wink:
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 mein Modul ThreadToGUI mit Clipboard Funktionen erweitert.

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

Auch mal das Beispiel mit SendEvent anschauen um aus einen Thread eine MessageRequester anzufordern.
Modul ? :freak: Ich weiss gerade noch was eine dll ist :mrgreen:

Ich schmeiss mal den Code in den Editor und schau es mir an, aber ich glaube da bin ich weit überfordert mit dem verstehen :bounce: zwischen euch und meinem Verständniss liegen zum Teil Welten
Teste gerade mal ein Dein Programm. Gute Idee :wink:
Thx :)

Leider muss ich es unter Linux etwas anders arbeiten lassen, weil unter Windoof reicht ja wenn mann einfach nur die Druck Taste drückt damit ein Screeny im Clipboard ist.

Unter Linux müsste ich warscheinlich dem auslösen der Druck Taste ein kleinst CLI Tool zuweisen das erst ein Image in das Clipboard wirft, damit es die Gui mitkriegt, oder die GUI Aufrufen mit einem Parameter der ein Image erstellt.
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
Antworten