Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Пропуск оператора в потоке


Автор: GorbunovDiman 5.3.2011, 21:14
Здраствуйте!

У меня такой вопрос: Есть поток, в нем у одного оператора есть таймаут(короче select для сокетов)
Можно ли сделать так, чтобы один поток(управляющий) заставил другой(в котором select) не дожидаться окончания выполнения этого опрератора, а переходить к следующему за ним?

Автор: bsa 5.3.2011, 22:17
GorbunovDiman, нет.

Автор: GorbunovDiman 6.3.2011, 11:04
А хотя-бы,  можно ли заставить искуственно сработать таймаут у select'а?
 Или, хотя-бы, добовлять дескрипторы в множество из другого потока на "лету"(хотя это, на мой взгляд, черевато ошибками)?

Автор: bsa 7.3.2011, 23:59
GorbunovDiman, поставь небольшой таймаут и обновляй список периодически.

Автор: MAKCim 8.3.2011, 12:18
Цитата(GorbunovDiman @  6.3.2011,  11:04 Найти цитируемый пост)
Или, хотя-бы, добовлять дескрипторы в множество из другого потока на "лету"(хотя это, на мой взгляд, черевато ошибками)? 

стандартный способ push'инга событий: засовываем конец пайпа, eventfd (или еще чего-то аналогичного) в select/poll/epoll...
когда нужен принудительный wake up кидаем байт в конец пайпа

Автор: GorbunovDiman 8.3.2011, 15:01
Цитата

стандартный способ push'инга событий: засовываем конец пайпа, eventfd (или еще чего-то аналогичного) в select/poll/epoll...
когда нужен принудительный wake up кидаем байт в конец пайпа 


А можно то-же самое но по подробнее , а то я не совсем понял smile 

У меня появился ещё такой вариант:
Создать стопсокет и записать его дискриптор в множество  exceptfds select'а .
НО! Кукую можно сделать безабидную ошибку в этом сокете, чтобы и select сработал , и программа не упала?

Добавлено через 1 минуту и 34 секунды
А что такое пайп вообще? smile 

Автор: GorbunovDiman 8.3.2011, 18:24
Цитата

Создать стопсокет и записать его дискриптор в множество  exceptfds select'а .


Этот ваариант оказался рабочим ! Сделал парный сокет AF_UNIX и записал его дискриптор в readfds(а не exceptfds). Получилась так называемая локальная петля.Но кто нибудь знает как это отражается на времени работы? И есть ли простые методы работующие быстрее?

Автор: bsa 8.3.2011, 20:45
GorbunovDiman, пайп (канал) - это что-то вроде одностороннего неименованного сокета. Читай mkpipe. Вариант с пайпами лучше, чем с сокетами - так как проще организуется.

Автор: GorbunovDiman 9.3.2011, 20:14
Цитата

. Вариант с пайпами лучше, чем с сокетами

А как это переносится на другие платформы?

Автор: MAKCim 10.3.2011, 12:27
Цитата(GorbunovDiman @  9.3.2011,  20:14 Найти цитируемый пост)
А как это переносится на другие платформы? 

хуже, чем сокеты ;)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)