Clôture de fil à l'aide de ExitThread - C

J'ai un programme simple qui crée un thread, boucles de vingt fois, et puis il fait un appel de fermer lui-même et effectuer le nettoyage nécessaire.

Quand je déboguer le programme de ce qu'il atteigne la ExitThread(); la méthode et les pauses, en ignorant le printf(); j'ai mis en place après son signal pour moi, c'est fermé.

Est-ce normal ou suis-je oublié de faire quelque chose? Je suis nouveau sur le filetage à l'aide de C.

Main()

void main()
{
    Time t;
    int i = 0;

    StartTimer();

    for(i = 0; i < 20; i++)
    {
        t = GetTime();
        printf("%d.%.3d\n", t.seconds, t.milliseconds);
        Sleep(100);
    }
    StopTimer();
}

De Création De Thread

void StartTimer()
{
    DWORD threadId;
seconds = 0;
milliseconds = 0;

//Create child thread
hThread = CreateThread(
    NULL,       //lpThreadAttributes (default)
    0,          //dwStackSize (default)
    ThreadFunc, //lpStartAddress
    NULL,       //lpParameter
    0,          //dwCreationFlags
    &threadId   //lpThreadId (returned by function)
    );

//Check child thread was created successfully
if(hThread == NULL)
{
    printf("Error creating thread\n");
}
}

Fil À Proximité

void StopTimer()
{
    DWORD exitCode;

    if(GetExitCodeThread(hThread,&exitCode) != 0)
    {
        ExitThread(exitCode);   
        printf("Thread closed");

        if(CloseHandle(hThread))
        {
            printf("Handle closed");
        }
    }
}

Edit:

J'ai réalisé que ExitThread() arrête l'exécution du thread, j'ai donc tenté d'utiliser une autre méthode pour l'arrêt de la minuterie, mais je suis toujours à gauche avec le même résultat.

void StopTimer()
{    
    WaitForSingleObject(hThread,INFINITE);
}

Solution:

La raison pour laquelle le programme a été l'arrêt au WaitForSingleObject() de l'appel et ne progresse peu importe combien de temps il a fallu à cause de l'opération, il attendait a une boucle infinie.

Il serait en attente d'une boucle infinie à la fin, pas la meilleure chose à faire. Modification du délai de WaitForSingleObject() pour quelque chose de plus raisonnable, comme 100 admis au programme de s'exécuter normalement.

Merci pour tous les commentaires.

  • Votre boucle (juste après StartTimer) n'est pas en cours d'exécution sur le fil que vous avez créé; il est en cours d'exécution sur le thread principal. Est-ce que vous est-il destiné? Quelle que soit la méthode ThreadFunc points seront en cours d'exécution sur le fil
  • Je crois que j'ai confondu moi-même, mon but était de créer un thread, effectuer une opération 20 fois, et puis la sortie du thread avant de fermer complètement le programme.
  • Ouais, c'est pas ce que vous faites, ce que vous pouvez faire est de commencer la discussion avec le point d'entrée de ThreadFunc, et puis à l'intérieur de threadfunc vous auriez exécuter la tâche.