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 : 49
    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.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  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