如果任何人都可以請幫助我,那將是巨大的:)獲取CPU信息
這似乎是一個艱難的一個。從過程ID開始,我需要能夠抓住:
- 佔用多少CPU的過程是在%佔用
- 進程已經使用CPU
這需要多久要用Cocoa/Objective-C或C編寫。它還需要通過Snow Leopard在Tiger上工作。
謝謝!
如果任何人都可以請幫助我,那將是巨大的:)獲取CPU信息
這似乎是一個艱難的一個。從過程ID開始,我需要能夠抓住:
這需要多久要用Cocoa/Objective-C或C編寫。它還需要通過Snow Leopard在Tiger上工作。
謝謝!
一個粗略的方法是產生一個popen
命令並從ps
獲取一些輸出。
即是這樣的:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void get_process_info(int pid) {
char ps_cmd[256];
sprintf(ps_cmd, "ps -O %%cpu -p %d", pid); // see man page for ps
FILE *fp = popen(ps_cmd, "r");
if (fp) {
char line[4096];
while (line == fgets(line, 4096, fp)) {
if (atoi(line) == pid) {
char dummy[256];
char cpu[256];
char time[256];
// PID %CPU TT STAT TIME COMMAND
// 32324 0,0 s001 S+ 0:00.00 bc
sscanf(line, "%s %s %s %s %s", dummy, cpu, dummy, dummy, time);
printf("%s %s\n", cpu, time); // you will need to parse these strings
pclose(fp);
return;
}
}
pclose(fp);
}
}
int main() {
get_process_info(32324);
return 0;
}
這似乎計算有點慢。我將每秒鐘對機器上當前的所有進程執行此操作,這可能不夠高效。儘管我給了你一個投票。至少你給了我一些東西:) – 2010-08-18 08:38:24
@Eric如果你想獲得所有進程的數據,可以很容易地進行優化。讓'ps'命令輸出全部並且同時解析它們。這隻會是每秒鐘一次「popen」呼叫。 – epatel 2010-08-18 09:06:02
目前,我每秒鐘都會爲Focus應用程序調用上述方法,但有時候幾秒鐘內沒有返回值。這有意義嗎?我怎樣才能優化代碼,以便在至少一個進程中快速運行? 非常感謝。 Btw偉大的投資組合! – 2010-08-18 09:41:02
你忘了寫上 「請」。 – Eimantas 2010-08-17 17:43:13
另外,請注意我的編輯(第一行)。 – 2010-08-17 17:59:40