IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Récupérer les threads id à partir d'un process id


Sujet :

Windows

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 26
    Points : 20
    Points
    20
    Par défaut Récupérer les threads id à partir d'un process id
    Bonjour,

    Je programme en général en C sous linux et je passe depuis peu sous windows.

    Ma question est la suivante : existe t'il une fonction ou un algorithme qui permet de récupérer les pids des threads issues d'un process dont on connait le pid?

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Voir cette page, par exemple.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    merci du lien, j'en ai trouvé un autre :

    http://www.codeguru.com/forum/archiv.../t-308121.html

    qui traite du même sujet. La solution serait donc (voici le code copié collé depuis le lien ci dessus) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    void printError( TCHAR* msg )
    {
    DWORD eNum;
    TCHAR sysMsg[256];
    TCHAR* p;
    
    eNum = GetLastError( );
    FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
    NULL, eNum,
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
    sysMsg, 256, NULL );
    
    // Trim the end of the line and terminate it with a null
    p = sysMsg;
    while( ( *p > 31 ) || ( *p == 9 ) )
    ++p;
    do { *p-- = 0; } while( ( p >= sysMsg ) &&
    ( ( *p == '.' ) || ( *p < 33 ) ) );
    
    // Display the message
    printf( "\n WARNING: %s failed with error %d (%s)", msg, eNum, sysMsg );
    }
    
    BOOL ListProcessThreads( DWORD dwOwnerPID )
    {
    HANDLE hThreadSnap = INVALID_HANDLE_VALUE;
    THREADENTRY32 te32;
    
    // Take a snapshot of all running threads
    hThreadSnap = CreateToolhelp32Snapshot( TH32CS_SNAPTHREAD, 0 );
    if( hThreadSnap == INVALID_HANDLE_VALUE )
    return( FALSE );
    
    // Fill in the size of the structure before using it.
    te32.dwSize = sizeof(THREADENTRY32 );
    
    // Retrieve information about the first thread,
    // and exit if unsuccessful
    if( !Thread32First( hThreadSnap, &te32 ) )
    {
    printError( "Thread32First" ); // Show cause of failure
    CloseHandle( hThreadSnap ); // Must clean up the snapshot object!
    return( FALSE );
    }
    
    // Now walk the thread list of the system,
    // and display information about each thread
    // associated with the specified process
    do
    {
    if( te32.th32OwnerProcessID == dwOwnerPID )
    {
    printf( "\n\n THREAD ID = 0x%08X", te32.th32ThreadID );
    printf( "\n base priority = %d", te32.tpBasePri );
    printf( "\n delta priority = %d", te32.tpDeltaPri );
    }
    } while( Thread32Next(hThreadSnap, &te32 ) );
    
    // Don't forget to clean up the snapshot object.
    CloseHandle( hThreadSnap );
    return( TRUE );
    }
    Je sais pas si dans mon utilisation ça ira car à première vue, ici on prend tous les threads et on cherche leur pid parent et si ca correspond, on garde le pid du thread. Mais en tout cas ça réponds à ma question !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/07/2010, 09h01
  2. Récupérer les données BMP à partir d'une DLL
    Par KRis dans le forum Langage
    Réponses: 23
    Dernier message: 17/10/2008, 10h28
  3. Réponses: 0
    Dernier message: 09/10/2008, 08h02
  4. Récupérer les donnees a partir d'une dataview
    Par rar77 dans le forum VB.NET
    Réponses: 1
    Dernier message: 22/11/2007, 22h21
  5. Réponses: 7
    Dernier message: 21/05/2007, 09h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo