2009-07-29 23 views

Répondre

3

Peut-être en utilisant GetThreadTimes aiderait?

Elaborer si le fil appartient à un autre exécutable, ce serait quelque chose (non testé) dans les lignes de:

// Returns true if thread times could be queried and its results are usable, 
// false otherwise. Error handling is minimal, considering throwing detailed 
// exceptions instead of returning a simple boolean. 
bool get_remote_thread_times(DWORD thread_id, FILETIME & kernel_time, FILETIME & user_time) 
{ 
    FILETIME creation_time = { 0 }; 
    FILETIME exit_time = { 0 }; 
    HANDLE thread_handle = OpenThread(THREAD_QUERY_INFORMATION, FALSE, thread_id); 
    if (thread_handle == INVALID_HANDLE) return false; 

    bool success = GetThreadTimes(thread_handle, &creation_time, &exit_time, &kernel_time, &user_time) != 0; 

    CloseHandle(thread_handle); 
    return success; 
} 
1

Je suis sûr que vous vous posez sur Windows, mais pour être complet, je vais vous décrire d'une façon cela peut se faire sur les systèmes Unix.

Le système de fichiers/proc contient des informations sur tous les processus en cours d'exécution sur votre ordinateur. Dans ce répertoire, vous trouverez des sous-répertoires pour chaque processus sur le système (nommé par pid), à l'intérieur de chacun de ces répertoires est un fichier appelé stat. Regardez "man proc" et recherchez l'entrée "stat". Ce fichier contient un tas d'informations, mais quelques champs peuvent être utilisés pour déterminer la durée de consommation de ce processus par l'utilisateur et le noyau. Avec cette connaissance en main, cherchez un sous-répertoire d'un processus appelé "tâche" ... Ici vous trouverez tous les processus enfants engendrés par le processus externe .. et si vous cd dans ceux-ci, vous Je vais trouver que chacun a un fichier de statistiques.