빌드 600+ 및 CPU 사용량 - 페이지 6

 
RaptorUK :

Process Explorer에서 나를 위해 뭔가를 확인할 수 있는지 궁금합니다.

terminal.exe 프로세스를 찾으면 두 번 클릭한 다음 스레드 탭으로 이동합니다. . . terminal.exe+ 라는 스레드가 하나 또는 두 개 있습니까? ... . 나는 두 개가 있습니다. . .

CPU MT4를 사용하는 것을 죽이면 여전히 정상적으로 실행되지만 CPU 사용량은 훨씬 적습니다.

기쁘지만 Windows용 Microsoft 디버깅 도구를 설치해야 합니다... 결과를 얻는 대로 게시하겠습니다.
 

여기 기본 사항이 있습니다. 필요에 따라 해결하세요.

 //+------------------------------------------------------------------+
//|                                                       !pCPUu.mq4 |
//+------------------------------------------------------------------+
#property version    "1.00"

#import "Psapi.dll"
   bool EnumProcesses( int & pProcessIds[], int cb, int & pBytesReturned);
   int   GetModuleBaseNameW( int hProcess, int & hModule[], char & lpBaseName[], int nSize);
   int   GetModuleFileNameExW( int hProcess, int & hModule[], ushort & lpFilename[], int nSize);
   bool EnumProcessModules( int hProcess, int & lphModule[], int cb, int & lpcbNeeded[]);

#import

#import "kernel32.dll"
   int   OpenProcess( int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
   bool GetProcessTimes( int hProcess, int & lpCreationTime[], int & lpExitTime[], int & lpKernelTime[], int & lpUserTime[]);
   bool GetSystemTimes( int & lpIdleTime[], int & lpKernelTime[], int & lpUserTime[]);
   int   GetLastError( void );
#import
#define PROCESS_QUERY_INFORMATION 0x0400
#define PROCESS_VM_READ 0x0010

double    CPU_Usage;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- create timer
   EventSetTimer ( 1 );
      
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- destroy timer
   EventKillTimer ();
      
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  {
//---
   int aProcesses[ 1024 ], cbNeeded, cProcesses, hMod[], szPN[ 1024 ], sz;
   int lpCreationTimeF[ 1 ], lpExitTimeF[ 1 ], lpKernelTimeF[ 1 ], lpUserTimeF[ 1 ];
   int lpCreationTimeS[ 1 ], lpExitTimeS[ 1 ], lpKernelTimeS[ 1 ], lpUserTimeS[ 1 ];
   string Prss;
            
   
   EnumProcesses(aProcesses, ArraySize (aProcesses), cbNeeded); // Get the list of process identifiers.
   cProcesses = cbNeeded / 4 ; // Calculate how many process identifiers were returned.
   for ( int i = 0 ; i < cProcesses; i++)
      {
       if (aProcesses[i] != 0 )
         {
         // Get a handle to the process.
         int hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE , aProcesses[i]);
         if (hProcess != 0 )
            {
             // Get the process name.
             if (EnumProcessModules(hProcess, hMod, ArraySize (hMod), szPN))
               {
               ushort szProcessName[ 1850 ];
               GetModuleFileNameExW(hProcess, hMod, szProcessName, ArraySize (szProcessName)/ 32 );
               Prss = ShortArrayToString (szProcessName);
               if ( StringFind (Prss, "terminal.exe" ) != - 1 )
                  {
                   // Calculate the process CPU usage
                  GetProcessTimes(hProcess, lpCreationTimeF, lpExitTimeF, lpKernelTimeF, lpUserTimeF);
                   Sleep ( 1000 );
                  GetProcessTimes(hProcess, lpCreationTimeS, lpExitTimeS, lpKernelTimeS, lpUserTimeS);
                  CPU_Usage=((((lpKernelTimeS[ 0 ]-lpKernelTimeF[ 0 ]) + (lpUserTimeS[ 0 ] - lpUserTimeF[ 0 ])) * 100 ) / 10000000 );
                   if (CPU_Usage > 10 )
                   Alert (Prss, " is: " , CPU_Usage, " Prss no=: " , aProcesses[i]);
                  }
               }
            }
         }
      }   
  }
 
SDC :

터미널 프로세스에서 나는 그것을 하는 방법을 몰라서 지금 해킹하고 있습니다. 나는 거의 그것을 얻을 수 있었지만 터미널이라고 말해야 한다고 생각하는 곳에 _total이라고 표시됩니다. 나는 MT4 프로세스 카운터를 그래픽 디스플레이 차트에 추가할 때와 동일하게 MT4를 수행하기를 원하는 모든 것에 대한 CPU 통계를 원하지 않습니다 ...

카운터를 추가할 때 프로세스를 선택해야 합니다. Processus 다음 %CPU 시간을 선택하고 프로세스를 선택합니다. (저는 프랑스어로 일하고 있어서 영어로 된 정확한 용어를 잘 모르겠습니다.)
 
angevoyageur :
기쁘지만 Windows용 Microsoft 디버깅 도구를 설치해야 합니다... 결과를 얻는 대로 게시하겠습니다.

확인. 뭔가 이상합니다. 쓰레드가 3개 있는데 이걸 가지고 놀다보니 %cpu가 늘어난 것 같습니다. 몇 가지 확인 하고 보고하겠습니다.
 
내에는 해당 terminal.exe+ 스레드가 두 개 있습니다. 스택을 확인 하고 계속 새로 고침하면 그 중 하나를 죽여야 한다고 생각하지 않습니다.
 
angevoyageur :
카운터를 추가할 때 프로세스를 선택해야 합니다. Processus 다음 %CPU 시간을 선택하고 프로세스를 선택합니다. (저는 프랑스어로 일하고 있어서 영어로 된 정확한 용어를 잘 모르겠습니다.)
알았어 다시 해볼게
 
RaptorUK :

Process Explorer에서 나를 위해 뭔가를 확인할 수 있는지 궁금합니다.

terminal.exe 프로세스를 찾으면 두 번 클릭한 다음 스레드 탭으로 이동합니다. . . terminal.exe+ 라는 스레드가 하나 또는 두 개 있습니까? ... . 나는 두 개가 있습니다. . .

CPU MT4를 사용하는 것을 죽이면 여전히 정상적으로 실행되지만 CPU 사용량은 훨씬 적습니다.


그것은 그것을 죽이려고했지만 더 이상 들어오는 진드기가 없습니다.

내 마더보드 전원 모니터링 유틸리티에 따르면 b625는 CPU에서 약 5W를 사용하는 반면 b509는 약 1W를 사용합니다. 이것은 Process Explorer의 CPU 수치를 백업하는 것 같습니다.

 
euclid :


그것은 그것을 죽이려고했지만 더 이상 들어오는 진드기가 없습니다.

내 마더보드 전원 모니터링 유틸리티에 따르면 b625는 CPU에서 약 5W를 사용하는 반면 b509는 약 1W를 사용합니다. 이것은 Process Explorer의 CPU 수치를 백업하는 것 같습니다.

네, 저도 그것을 발견했습니다. . .
 
angevoyageur :
확인. 뭔가 이상합니다. 쓰레드가 3개 있는데 이걸 가지고 놀다보니 %cpu가 늘어난 것 같습니다. 몇 가지 확인하고 보고하겠습니다.
아니요. 유용한 것을 볼 수 없습니다. 나는 현재 플랫폼이 아무것도 하지 않는다는 사실에도 불구하고 2개의 터미널 스레드(차트 없음, 기호 없음)와 %cpu가 0.8%에서 2.1%로 다양합니다. 차트를 열고 모든 기호를 표시하면 이 %는 약 3-4%입니다.
 
angevoyageur :
아니요. 유용한 것을 볼 수 없습니다. 나는 현재 플랫폼이 아무것도 하지 않는다는 사실에도 불구하고 2개의 터미널 스레드(차트 없음, 기호 없음)와 0.8%에서 2.1%까지 다양한 %cpu를 가지고 있습니다. 차트를 열고 모든 기호를 표시하면 이 %는 약 3-4%입니다.
플랫폼이 여전히 들어오는 틱을 받아들이고 있기 때문입니까?
사유: