2009-07-25 12 views
3

Visual Studioを使用してWindowsにc/C++コードを書いています。プロセスの開始時間を効果的に計算する方法を知りたい。 gettimeofday()を使うことはできますか?私はGoogleからの次のコードを見つけたが、私はそれが本当にやっているのか理解していない:Windowsでプロセスの開始時間をプログラムで計算する

int gettimeofday(struct timeval *tv, struct timezone *tz) 
{ 
    FILETIME ft; 
    unsigned __int64 tmpres = 0; 
    static int tzflag; 

    if (NULL != tv) 
    { 
    GetSystemTimeAsFileTime(&ft); 

    //I'm lost at this point 
    tmpres |= ft.dwHighDateTime; 
    tmpres <<= 32; 
    tmpres |= ft.dwLowDateTime; 

    /*converting file time to unix epoch*/ 
    tmpres /= 10; /*convert into microseconds*/ 
    tmpres -= DELTA_EPOCH_IN_MICROSECS; 
    tv->tv_sec = (long)(tmpres/1000000UL); 
    tv->tv_usec = (long)(tmpres % 1000000UL); 
    } 

    if (NULL != tz) 
    { 
    if (!tzflag) 
    { 
     _tzset(); 
     tzflag++; 
    } 
    tz->tz_minuteswest = _timezone/60; 
    tz->tz_dsttime = _daylight; 
    } 

    return 0; 
} 
+0

GMan、どのようにコードが見栄えになりましたか?私はコードタグを使ってみましたが、うまくいきませんでした。 –

+0

最初の行だけでなく、4行のスペースでそれぞれの行をプリペンドする必要があります。 – GManNickG

+0

私はあなたが "開始時間を計算する"ということをより具体的にする必要があると思います。あなたは人間が読める形式でそれを印刷できるようにしたいですか? "2009年7月24日、午後8時14分"?または、計算などに使用しますか?プログラムが最後に実行されてからの経過時間を測定しますか?または、他の何か?答えはあなたが時間の値で何をしたいかによって決まります。 –

答えて

7

私は右のあなたを理解していれば、あなたのプロセスが開始何時間を知りたい、正しいですか?したがって、GetProcessTimes(http://msdn.microsoft.com/en-us/library/ms683223(VS.85).aspx)を調べることになります。

興味のあるプロセスが現在のプロセスである場合、GetCurrentProcess()を使用して、GetProcessTimes()を呼び出す必要があるプロセスハンドルを取得できます。これは、閉じる必要のない疑似ハンドルを返します。

+0

これは正しい答えです。 – Foredecker

3

私の質問は終了しました。私はプロセスの形状からGetProcessTimeの例を見つけました。そして、この質問にリンクしている人もいます。私はこれをリリースし、それは私の例ですよ

HANDLE hSnapshot; //variable for save snapshot of process 
PROCESSENTRY32 Entry; //variable for processing with snapshot 
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //do snapshot 
Entry.dwSize = sizeof(Entry); //assign size of Entry variables 
Process32First(hSnapshot, &Entry); //assign Entry variable to start of snapshot 
HANDLE hProc; //this variable for handle process 
SYSTEMTIME sProcessTime; // this variable for get system (usefull) time 
FILETIME fProcessTime, ftExit, ftKernel, ftUser; // this variables for get process start time and etc. 
do 
{ 
    hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, Entry.th32ProcessID);//Open process for all access 
    GetProcessTimes(hProc, &fProcessTime, &ftExit, &ftKernel, &ftUser);//Get process time 
    FileTimeToSystemTime(&fProcessTime, &sProcessTime); //and now, start time of process at sProcessTime variable at usefull format. 
} while (Process32Next(hSnapshot, &Entry)); //while not end of list(snapshot) 
関連する問題