LINUX.ORG.RU

fgets


0

0

Проблемка в том что в нити в цикле вызывается ф-ия fgets которая ждет чтож придет из потока.

Но есть необходимость убить эту нить! Если я использую pthread_cansel то нить вроде убивается а когда я в основной программе вызываю pclose() что бы закрыть поток, который использовался в ните то на ней все виснет :(

Отсуда необходимость поставить в нити какуню-нибудь фунцию которая будет говорить о том что "Да! В поток пришли данные надо читать" и вызываем fgets или "Все тебе пора завершиться" и мы вызываем pthread_exit() есть ли такая ф-ия?

anonymous

>Отсуда необходимость поставить в нити какуню-нибудь фунцию которая будет >говорить
>сть ли такая ф-ия?

называется общая переменная.

fghj ★★★★★
()
Ответ на: комментарий от fura13

	gint err;
	fd_set rd;
	sigset_t mask,oldmask;
	FD_ZERO(&rd);
	FD_SET((gint)thread.stream,&rd); // Тут вылет :(
	sigfillset(&mask);
	pthread_sigmask(SIG_SETMASK,&mask,&oldmask);
	sigdelset(&mask,SIGUSR1);
	while(1){
		fd_set rd_res = rd;
		err = pselect(1,&rd_res,NULL,NULL,NULL,&mask);
...

thread.stream = popen(...)

Вот делаю так и вылет на строчке FD_SET

Как правильно в rd засунуть указатель на поток?

anonymous
()
Ответ на: комментарий от anonymous

Сделал FD_SET(fileno(thread.stream),&rd);

Все равно pselect "не видит" что из потока приходит инфа которую надо читать! Зависла и все :(

anonymous
()
Ответ на: комментарий от anonymous

> Все равно pselect "не видит" что из потока приходит инфа которую надо 
> читать! Зависла и все :(
select( fileno(thread.stream) + 1, ...);

kondor ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.