Je ne comprend pas pourquoi tu dis ça, la procédure fonctionne. il ne reste plus qu'à programmer le reste correctement
, question de lisibilité, de clarté de programmation, et surtout il n'y à pas de soucis de gestion d'event.
Il te reste à programmer le dessin du graph sur le canvas (je trouve le canvas bien mieux approprié que l'image gadget).
J'ai dans mes code un graph gadget, mais il dépend de mon environnement custom gadget, donc c'est un peu lourd de poster le code ici...
Code : Tout sélectionner
;{ structure et procedure
Structure PROCESS_MEMORY_COUNTERS
cb.l;DW
PageFaultCount.l;DW
PeakWorkingSetSize.l;SIZE_T
WorkingSetSize.l;SIZE_T
QuotaPeakPagedPoolUsage.l;SIZE_T
QuotaPagedPoolUsage.l;SIZE_T
QuotaPeakNonPagedPoolUsage.l;SIZE_T
QuotaNonPagedPoolUsage.l;SIZE_T
PagefileUsage.l;SIZE_T
PeakPagefileUsage.l;SIZE_T
EndStructure
ProcedureDLL GetProcessMemory(PID.l)
Protected pmc.PROCESS_MEMORY_COUNTERS, hProcess.l
hProcess.l = OpenProcess_(#PROCESS_QUERY_INFORMATION|#PROCESS_VM_READ, #False, PID)
Static *F.i
If *F = 0
If OpenLibrary(0,"PSAPI.DLL")
*F = GetFunction(0,"GetProcessMemoryInfo")
If *F = 0
CloseLibrary(0)
ProcedureReturn -1 ; erreur
EndIf
Else
ProcedureReturn -1 ; erreur
EndIf
EndIf
CallFunctionFast(*F, hProcess, @pmc, SizeOf(pmc))
ProcedureReturn pmc\WorkingSetSize
EndProcedure
;}
;{ init window
CMEM_window = OpenWindow(#PB_Any, 0, 0, 600, 270, "PB Leak Finder", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
Image_0 = CanvasGadget(#PB_Any, 10, 110, 580, 130)
CMEM_Button_exe = ButtonGadget(#PB_Any, 10, 10, 100, 20, "Choose EXE...")
CMEM_Button_quit = ButtonGadget(#PB_Any, 10, 70, 100, 20, "Quit", #PB_Button_Default)
CMEM_Button_stop = ButtonGadget(#PB_Any, 120, 10, 50, 50, "STOP",#PB_Button_MultiLine)
TextGadget(#PB_Any, 410, 13, 70, 20, "Check every")
TextGadget(#PB_Any, 570, 13, 20, 20, "sec.")
CMEM_combo = ComboBoxGadget(#PB_Any, 490, 10, 70, 20)
CMEM_checkbox_null = CheckBoxGadget(#PB_Any, 410, 35, 200, 20, "Only log memory event")
CMEM_Button_log = ButtonGadget(#PB_Any, 10, 40, 100, 20, "Please log-it", #PB_Button_Right | #PB_Button_Toggle)
CMEM_Button_aide = ButtonGadget(#PB_Any, 120, 70, 50, 20, "?")
CMEM_editor = EditorGadget(#PB_Any, 180, 10, 220, 80)
;{ remplissage de la combo
AddGadgetItem(CMEM_combo, -1, "0.1")
AddGadgetItem(CMEM_combo, -1, "0.2")
AddGadgetItem(CMEM_combo, -1, "0.5")
AddGadgetItem(CMEM_combo, -1, "1")
AddGadgetItem(CMEM_combo, -1, "2")
AddGadgetItem(CMEM_combo, -1, "5")
SetGadgetState(CMEM_combo, 2)
SetGadgetState(CMEM_checkbox_null, #True)
;}
;}
CMEM_program$ = ""
CMEM_program_ID = 0
CMEM_program_PID = 0
CMEM_temps = 0
CMEM_delay = 0
CMEM_log_null_event = #True
Repeat
event = WaitWindowEvent(20)
;{ traitement des events
If event = #PB_Event_Gadget
Select EventGadget()
Case CMEM_Button_aide
Case CMEM_Button_exe
CMEM_program$ = OpenFileRequester("Programme a tester (Leak Memory)","*.exe","EXE|*.exe",0)
If CMEM_program$
CMEM_program_ID = RunProgram(CMEM_program$,"","",#PB_Program_Open)
CMEM_temps = ElapsedMilliseconds()
cmem_delay = ValD(GetGadgetText(CMEM_combo))*1000
If CMEM_program_ID
CMEM_program_PID = ProgramID(CMEM_program_ID)
SetGadgetText(CMEM_Button_stop, "STOP" + #CR$ + "(" + Str(CMEM_program_PID) + ")")
Else
MessageRequester("Program not running","Program" + #CR$ + CMEM_program$ + #CR$ + "is Not running")
EndIf
EndIf
Case CMEM_Button_log
Case CMEM_Button_quit
event = #PB_Event_CloseWindow
Case CMEM_Button_stop
If CMEM_program_ID
KillProgram(CMEM_program_ID)
CloseProgram(CMEM_program_ID)
CMEM_program_ID = 0
EndIf
SetGadgetText(CMEM_Button_stop, "STOP")
Case CMEM_checkbox_null
CMEM_log_null_event = GetGadgetState(CMEM_checkbox_null)
Case CMEM_combo
cmem_delay = ValD(GetGadgetText(CMEM_combo))*1000
EndSelect
EndIf
;}
;{ log de la memoire
If CMEM_program_ID And ElapsedMilliseconds() - CMEM_temps >= CMEM_delay
CMEM_temps = ElapsedMilliseconds()
CMEM_utilisation_mem = GetProcessMemory(CMEM_program_PID)
If (CMEM_log_null_event And CMEM_utilisation_mem - CMEM_utilisation_mem_old <> 0) Or Not CMEM_log_null_event
CMEM_text$ = FormatDate("%hh:%ii:%ss",Date())+" - Delta:"+Str(CMEM_utilisation_mem - CMEM_utilisation_mem_old)+" Bytes"
AddGadgetItem(CMEM_editor, 0, CMEM_text$)
EndIf
CMEM_utilisation_mem_old = CMEM_utilisation_mem
If ProgramRunning(CMEM_program_ID) = 0
CloseProgram(CMEM_program_ID)
CMEM_program_ID = 0
CMEM_text$ = FormatDate("%hh:%ii:%ss",Date())+" - Program was ended"
AddGadgetItem(CMEM_editor, 0, CMEM_text$)
EndIf
EndIf
;}
Until event = #PB_Event_CloseWindow
;{ on arrête tout proprement
If CMEM_program_ID
KillProgram(CMEM_program_ID)
CloseProgram(CMEM_program_ID)
EndIf
;}
End