LINUX.ORG.RU

Cлишком много событий, реализованных via pipe.... Что делать?


0

0

У меня события реализованы с момощью pipe. select() выполняет функции WaitEvent и WaitForMultipleEvents. Но вот событий делается очень много, больше, чем макс. количество файловых дескрипторов, и у меня все валится. Как в этом случае поступить?

Большое списабо за ответы!

anonymous

то есть как это?
у тебя каждому событию один пайп????


не рациональне ли использовать один пайп через который передаем структуру типа
struct commend {
int command_code;
int data;
};

Dead ★★★★
()

Гм.... Ну а как же тогда получается? Если куча тредов ждут разных событий, некоторые из них сразу несколько, то, обсасывая select-ом один-единственный пайп-событие, каждому из них придется в цикле после выхода из селекта проверять тип пришедшего события. Так? Что-то мне не очень нравится такая картина :)

Да, а если несколько тредов ждут одного события, то ведь потом кому-то придется убирать из пайпа это событие. А кому?...

Где я не прав?


anonymous
()

а

ну так ты бы схему поподробней разрисовал.....

Dead ★★★★
()

Ну мне просто нужен аналог объекта-события из виндов. И соответствующие функи WaitForEvent и WaitForMultipleEvents. Тред может установить данное событие, может скинуть, может ждать его, а может ждать хотя бы одного события из данного набора. Все это я сделал, написав такую структуру: 

TYPE
  Event_PTR = POINTER TO Event_STR;
  Event_STR = RECORD
    lock : CriticalSection;
    pipe : pipe_t;
  END;

Вот... Объекты-события создаются и затем активно используются. Jжидание события или нескольких событий - с помощью select....

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