У меня есть простая программа, которая создает поток, зацикливается двадцать раз, а затем выполняет вызов, чтобы закрыть себя и выполнить необходимую очистку.
Когда я отлаживаю программу, она достигает ExitThread (); метод и паузы, игнорируя printf (); Я установил после этого сигнал, что он закрыт.
Это нормально или я забыл что-то сделать? Я новичок в потоках с использованием 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();
}
Создание темы
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");
}
}
Тема закрыта
void StopTimer()
{
DWORD exitCode;
if(GetExitCodeThread(hThread,&exitCode) != 0)
{
ExitThread(exitCode);
printf("Thread closed");
if(CloseHandle(hThread))
{
printf("Handle closed");
}
}
}
Edit:
Я понял, что ExitThread () останавливает исполняющий поток, поэтому я попытался использовать другой метод, чтобы остановить таймер, но у меня все еще остается тот же результат.
void StopTimer()
{
WaitForSingleObject(hThread,INFINITE);
}
Решение:
Причина, по которой программа остановилась при вызове WaitForSingleObject () и не выполнялась, независимо от того, сколько времени это заняло, потому что операция, в которой она ожидала, имела бесконечный цикл.
Было бы ждать окончания бесконечного цикла, а это не лучшая вещь. Изменение задержки WaitForSingleObject () на более разумное значение, например, 100, позволило программе нормально работать.
Спасибо за ввод.