кажется я схожу с ума

May 11, 2007 23:53


#include
#include

int i=0;

DWORD WINAPI ThFunc(void*)
{
 printf("thread entered\n");
 Sleep(1000);
 printf("thread exited %d\n",++i);
 return 0;
}

void main()
{
 printf("hello?\n");
 HANDLE th1=CreateThread(0,0,ThFunc,0,0,0);
 Sleep(1000);
 return;
}
может я чего-то в этой жизни не понимаю ( Read more... )

глюки

Leave a comment

Comments 7

paging May 11 2007, 20:16:47 UTC
У тебя там получается гонка между естественным завершением потока и его принудительным завершением при завершении процесса в целом. Мне кажется здесь собака порылась... Попробуй в main поставить таймаут побольше и посмотри что изменится.
P.S. Хотя, я ни разу не специалист по программированию под винды, так что это все так, измышления :)

Reply

ivan_prog May 12 2007, 15:20:39 UTC
если поставить паузу больше, то поток успеет завершиться и не произойдет ничего сверхъестественного... но так же не интересно ;)

Reply


alex36 May 12 2007, 09:32:11 UTC
чтобы все работало нормально нужно выбрать Multithread Runtime Library в настройках проекта :)

Reply

ivan_prog May 12 2007, 10:00:19 UTC
возможно!
этот момент я упустил из виду.
если в программе создается около 100-150 потоков, как дождаться их завершения, что бы они не убились раньше времени?

Reply

alex36 May 12 2007, 10:22:08 UTC
используй WaitForMultipleObjects
кстати, не советую создавать и уничтожать потоки системными функциями. лучше делать это через _beginthreadex и _endthreadex.

Reply

ivan_prog May 12 2007, 11:08:35 UTC
потоки создаются функцией CreateThread(), думаю ничего страшного в этом нет, насильно потоки не убиваются, все должны самостоятельно завершиться.
вот проблема: корректно ли отработает WaitForMultipleObjects если часть потоков может самостоятельно завершиться до вызова этой функции?

Reply


Leave a comment

Up