Build 600+ et utilisation du CPU - page 6

 
RaptorUK:

Je me demande si vous pouvez vérifier quelque chose pour moi dans votre Explorateur de processus ?

Si vous trouvez le processus terminal.exe, double-cliquez dessus puis allez dans l'onglet Threads . ... Avez-vous un ou deux threads appelés terminal.exe+... ... ? J'en ai deux...

Si je tue celui qui utilise le CPU, MT4 semble toujours fonctionner correctement, mais avec une utilisation du CPU beaucoup plus faible.

Avec plaisir mais je dois installer des outils de débogage Microsoft pour Windows... Je posterai le résultat dès que je l'aurai.
 

Voici les principes de base, adaptez-les à vos besoins.

//+------------------------------------------------------------------+
//|                                                       !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:

Je ne sais pas comment faire pour le processus terminal, alors je suis en train de le pirater en essayant différentes choses. J'ai presque réussi à le faire mais il dit _total là où je pense qu'il devrait dire terminal. Je ne veux pas les statistiques CPU sur tout, je veux juste qu'il fasse MT4 de la même manière que lorsque j'ajoute le compteur de processus MT4 au graphique d'affichage ...

Vous devez choisir le processus lorsque vous ajoutez le compteur. Processus puis %CPU time et choisir le processus. (Je travaille en français donc je ne suis pas sûr du terme exact en anglais).
 
angevoyageur:
Avec plaisir mais je dois installer des outils de débogage Microsoft pour Windows... Je posterai le résultat dès que je l'aurai.

Ok. Il y a quelque chose de bizarre. J'ai 3 threads, mais il semble que le %cpu ait augmenté depuis que je joue avec ça. Je vais faire quelques vérifications et faire un rapport à ce sujet.
 
J'ai deux de ces threads terminal.exe+ dans le mien, je ne pense pas que vous devriez en tuer un, ils ont l'air d'en faire beaucoup si vous vérifiez les piles sur eux et si vous continuez à rafraîchir.
 
angevoyageur:
Vous devez choisir le processus lorsque vous ajoutez le compteur. Processus puis %CPU time et choisir le processus. (Je travaille en français donc pas sûr du terme exact en anglais).
ok je vais réessayer
 
RaptorUK:

Je me demande si vous pouvez vérifier quelque chose pour moi dans votre Process Explorer ?

Si vous trouvez le processus terminal.exe, double-cliquez dessus puis allez dans l'onglet Threads . ... Avez-vous un ou deux threads appelés terminal.exe+... ... ? J'en ai deux...

Si je tue celui qui utilise le CPU, MT4 semble toujours fonctionner correctement mais avec une utilisation du CPU beaucoup plus faible.


Il a essayé de le tuer, mais je n'ai plus eu de tiques entrantes.

Selon l'utilitaire de surveillance de l'alimentation de ma carte mère, b625 utilise environ 5W sur mon CPU, alors que b509 utilise environ 1W. Cela semble confirmer les chiffres de l'utilisation du CPU fournis par Process Explorer.

 
euclid:


J'ai essayé de le tuer, mais je n'ai plus eu de tics entrants.

Selon l'utilitaire de surveillance de l'alimentation de ma carte mère, la b625 utilise environ 5W sur mon CPU, alors que la b509 utilise environ 1W. Cela semble confirmer les chiffres du CPU provenant de Process Explorer.

Oui, j'ai découvert ça aussi...
 
angevoyageur:
Ok. Il y a quelque chose de bizarre. J'ai 3 threads, mais il semble que le %cpu ait augmenté depuis que je joue avec ça. Je vais faire quelques vérifications et faire un rapport à ce sujet.
Non, je ne vois rien d'utile. J'ai actuellement 2 fils de terminal (sans graphiques, sans symboles) et le %cpu varie de 0,8 % à 2,1 %, malgré le fait que la plateforme est censée ne rien faire. Lorsque j'ouvre un graphique et que j'affiche tous les symboles, ce % se situe autour de 3-4%.
 
angevoyageur:
Non, je ne vois rien d'utile. J'ai actuellement 2 fils de terminal (sans graphiques, sans symboles) et le %cpu varie de 0,8% à 2,1%, malgré le fait que la plateforme est censée ne rien faire. Lorsque j'ouvre un graphique et que j'affiche tous les symboles, ce % se situe autour de 3-4%.
Est-ce parce que la plateforme accepte toujours les ticks entrants ?