Управление потоками в С
От: taper  
Дата: 15.07.06 23:34
Оценка:
Есть некий клиентский API к одной системе, сделанный на С, мне необходимо сделать DLL, с помощью которой могли бы работать несколько клиентов одновременно . Сама по себе DLL готова, но при работе с ней происходят случайные глюки при подключении к серваку. Судя по логам сервака, он паникует из-за того, что считает, что к нему пытается подключится один и тот-же процесс . Сейчас решил добавить в свою DLL многопоточность, думаю что это должно помочь. Но появлась проблема — как правильно организовать потоки?
В один поток нужно полностью закинуть работу с серваком, которая выглядит следующим образом:
— login;
— action (send message, get reply, post event, ...);
— logout.
Action может вызываться произвольное количество раз и в произвольном порядке.
Есть идея организовать управление потоком с помощью ивентов (по одному ивенту на каждый action + один для logout). Но если таких потоков потребуется создать порядка тысячи — то как сохранять информацию о всех ивентах? И есть ли ограничение на их количество?
Ну а вот собственно и сам вопрос: правильным ли путем я продвигаюсь? Может у кого-нибудь есть идеи, как можно победить такие завороты?
Буду рад любой помощи.
Re: Управление потоками в С
От: raincrossbow  
Дата: 15.07.06 23:50
Оценка:
А как DLL-ка коннектится к серваку? На один и тот же порт?
Re[2]: Управление потоками в С
От: taper  
Дата: 16.07.06 09:43
Оценка:
Здравствуйте, raincrossbow, Вы писали:

R>А как DLL-ка коннектится к серваку? На один и тот же порт?


Да, на серваке поднимаются сервисы, и каждый работает на своём порту (система обзывается Tuxedo, может кто слышал).
Re[3]: Управление потоками в С
От: raincrossbow  
Дата: 16.07.06 10:37
Оценка:
Здравствуйте, taper, Вы писали:

T>Да, на серваке поднимаются сервисы, и каждый работает на своём порту (система обзывается Tuxedo, может кто слышал).


Так может сервак некорректно обрабатывает множественные подключения к одному порту???
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.