Un code raté…

Programmation d'applications complexes
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Un code raté…

Message par Mytic »

Je me suis battu plus d’une heure pour arriver à ça !!
Et à la fin ça ne marche pas …
Je le laisse ici, ça peu toujours servir en pièces détachées.
Ah au fait !! Le but du code c’est de donner le temps que prend un process du CPU.

Plusieurs morceaux du Code sont des adaptations de codes fait en d’autres langages.

:lol:

Code : Tout sélectionner



Global bRet.b 

Global ftKernel.FILETIME
Global ftUser.FILETIME
Global ftKernelStart.FILETIME
Global ftUserStart.FILETIME

Global ProcessId.L
Global ProcessorCount.l
Global NanoSec.l = 10000000

Global curStart.L
Global curEnd.l
Global curFreq.L

Structure  SYSTEM_INFO2
        dwOemID.l
        dwPageSize.l
        lpMinimumApplicationAddress.l
        lpMaximumApplicationAddress.l
        dwActiveProcessorMask.l
        dwNumberOrfProcessors.l
        dwProcessorType.l
        dwAllocationGranularity.l
        dwReserved.l
EndStructure

Global SysInfo.SYSTEM_INFO2
Procedure.l ID_Process(nom.s)
    hwnd.l = FindWindow_ ( 0, 0 )
     While hwnd <> 0
         If GetWindowLong_ (hwnd, #GWL_STYLE ) & #WS_VISIBLE = #WS_VISIBLE
             ; If GetwindowLong_(Hwnd, #GWL_EXSTYLE) & #WS_EX_TOOLWINDOW <> #WS_EX_TOOLWINDOW
            txt.s = Space (256)
             GetWindowText_ (hwnd, txt, 256)
               If txt = nom
               GetWindowThreadProcessId_(hWnd, @LProcessId)
                ProcedureReturn LProcessId 
               EndIf
             EndIf
             ; EndIf
         ;EndIf
        hwnd = GetWindow_ (hwnd, #GW_HWNDNEXT )
     Wend
EndProcedure

Procedure GetProcTimes()
 hProcess.l = 0
   
    hProcess = OpenProcess_(#PROCESS_QUERY_INFORMATION, 0, ProcessId)
    If hProcess
        bRet = GetProcessTimes_(hProcess, 0, 0, ftKernel, ftUser)
        CloseHandle_(hProcess)
    EndIf
   
EndProcedure

Procedure InitialiseCounter()


   
    GetSystemInfo_(SysInfo)
    ProcessorCount = SysInfo\dwNumberOrfProcessors
    QueryPerformanceFrequency_(curFreq)

    GetProcTimes()
    QueryPerformanceCounter_(curStart)

    ftKernelStart = ftKernel
    ftUserStart = ftUser
   
EndProcedure


Procedure SetPid(PID.l)
   
    ProcessId = PID
    InitialiseCounter()
   
EndProcedure

Procedure.s GetCpuUsage()

    Static ProcTime.d
    Static hProcess.l
   
    If ProcessId > 0 
        GetProcTimes()
        QueryPerformanceCounter_(curEnd)
        ProcTime = (ftKernel\dwLowDateTime - ftKernelStart\dwLowDateTime + (ftUser\dwLowDateTime - ftUserStart\dwLowDateTime))
        ProcTime = CDbl_(ProcTime / ProcessorCount) / CDbl(((curEnd - curStart) / curFreq))
        QueryPerformanceCounter_(curStart)
        GetCpuUsage = (ProcTime / NanoSec) * 100
        ftKernelStart = ftKernel
        ftUserStart = ftUser
    End If
   
EndProcedure




Debug ID_Process("btwdins")