Вот такая прога не работает. Здесь оба потока создаются нормально, один начинает писать в свой файл, сообщая каждую секунду write OK. Однако второй поток вообще ничего не сообщает, вызов select подвисает. Подскажите, плиз, в чем тут дело. int mypipe[2]; void * start1(void*p) { int i; char buf[1]; int err; for(i=0;i<10;++i) { sleep(1); buf[0] = (char)i; if(write(mypipe[1], buf, 1) < 0) { perror("thread1: write error:"); break; } } return NULL; } void * start2(void*p) { int i; int err; char buf[1]; fd_set s; for(i = 0; i < 15; ++i) { FD_ZERO(&s); FD_SET(mypipe[0], &s); if((err=select(1, &s, NULL, NULL, NULL)) < 0) { perror("thread2: file descriptors select error:"); break; } else if(err == 0) printf("select timeout\n"); if(read(mypipe[0], buf, 1) < 0) { perror("thread2: read error:"); break; } else printf("data received: %d\n", buf[0]); } return NULL; } int main() { pthread_t th1, th2; int err; if((err = pipe(mypipe)) != 0) { perror("error creating pipe: "); return 1; } pthread_create(&th2, NULL, start2, NULL); pthread_create(&th1, NULL, start1, NULL); return 0; }
Ответ на:
комментарий
от Dead
Ответ на:
комментарий
от Dead
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум помогите с select/pipe, плииииз... (2003)
- Форум вопрос про select() (2013)
- Форум fifo между wine приложением и не wine (2015)
- Форум Консольный обмен сообщениями (2017)
- Форум «Hello world» глючит (2015)
- Форум Баги в select! (2003)
- Форум Помогите разобраться с многопоточностью (2014)
- Форум select (2006)
- Форум Потоки. Не отрабатывается функция потока. С#. (2013)
- Форум Pipe (2011)