Здравствуйте!
Столкнулся со следующей проблемой:
Есть поток, запускаемый в программе
char *stack_s;
char *args_s[3];
......
stack_s = (char *) malloc( STACK_SIZE );
.......
функция, вызываемая, что бы запустить поток:
int play_(void)
{
if(flag==1)
{
_beginthread( thread_s, stack_s, STACK_SIZE, args_s );
}
return 0 ;
}
void thread_s( void *parm )
{
//здесь выполняется некоторый код
flag =0;
_endthread();
}
/* --------------------------------------------- */
при запуске программы, при каждом вызове функции play_, в системе появляется по одному ZOMBIE, пока основная программа не завершится!
Каждый поток выполняет свою работу и должен по-идее корректно завершиться.
Если я комментирую _beginthread, то зомби в системе конечно нет.
Что я делаю не корректно, ведь в документации сказано, что поток должен завершаться функцией _endthread ?
Получается что потоки в QNX4 создаются все же как процессы, когда должна вызываться функция wait() или waitpid()
Важная вещь: программа запускается под VirtualBox, система QNX4.2. Вывод процессов осуществляется графической функцией sin.
P.S. открыл справку в QNX, собрал пример из хелпа к _beginthread() , в системе, пока запущен основной процесс, висит зомби.
(После того, как программа проработает достаточно продолжительное время, любая попытка запуска любого приложения, в том числе консоли приводит к ошибке
"resource temporary unavailable" так процессов зомби становиться огромное количество.)
Переделал алгоритм, так, что бы в программе один поток был запущен постоянно.