建立600+和CPU的使用 - 页 6

 
RaptorUK:

我想知道你是否能在你的进程浏览器中为我检查一些东西?

如果你找到 terminal.exe 进程,双击它,然后转到线程选项卡。你是否有一个或两个名为terminal.exe+ 的 线程 ...... 我有两个 . .

如果我杀死使用CPU的那一个,MT4仍然可以运行,但CPU的使用率要低得多。

我很高兴,但我需要安装一些用于Windows的微软调试工具......我将在得到结果后尽快发布。
 

这是最基本的,根据你的需要进行调整。

//+------------------------------------------------------------------+
//|                                                       !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,我认为它应该说终端。我不想要所有的CPU统计数据,我只想让它和MT4一样,当我把MT4进程计数器添加到图形显示图表中时...。

当你添加计数器时,你必须选择进程。你必须在添加计数器时选择进程,然后选择%CPU时间,再选择进程。(我是用法语工作的,所以不确定英语的确切术语)。
 
angevoyageur:
我很高兴,但我需要安装一些用于Windows的微软调试工具......我一拿到结果就会公布。 。

好的。有件事很奇怪。我有3个线程,但似乎在我玩这个的时候,%cpu增加了。我将做一些检查 并报告有关情况。
 
我有两个终端.exe+线程,我不认为你应该杀死其中一个,如果你检查 它们的堆栈并不断刷新,它们似乎做了相当多的事情。
 
angevoyageur:
当你添加计数器时,你必须选择进程。Processus然后是%CPU时间,然后选择进程。(我是用法语工作的,所以不确定英语中的确切术语)。
好的,我再试一下
 
RaptorUK:

我想知道你是否可以在你的进程资源管理器中为我检查一些东西?

如果你找到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个终端线程(没有图表,没有符号),%cpu从0.8%到2.1%不等,尽管该平台应该什么都不做。当我打开一个图表并显示所有符号时,这个百分比大约是3-4%。
这是因为平台仍在接受输入的点数吗?