Автор
|
Тема: Сокеты. сцена 3(заключительная).
|
gonzales |
опубликован 13-01-2002 10:56 MSK
Ну вот и подходит к концу (развязке) данное произведение искусства . Какие же были баги. 1.Отсутствие мозгов. Решение :Идти в монахи. 2.Я считал , что если я завожу себе CWinThread то все его методы которые я вызываю ,будут вызываться в контексте этого потока. Как вы понимаете я жестоко ошибался. И вызываются они в контексте текущего. Решение: Думаю я буду делать супер-пупер-мега callback механизм и передавать в child thread указатель на функции которую он в свою очередь будет вызывать. Занавес. Gonzales уходит со сцены. P.S. Если есть какие-то мысли по поводу callback механизма буду рад выслушать. p.p.s 2Lamo . Будешь отвечать , постарайся без мата и восклицательных знаков.
|
necer
|
опубликован 14-01-2002 10:22 MSK
А зачем именно callback механизм? А если попробовать воспользоваться сообщениями? |
Flex Ferrum
|
опубликован 14-01-2002 10:28 MSK
necer: А по сути это тот-же callback механизм, только продвинутый :)). |
necer
|
опубликован 14-01-2002 14:14 MSK
В общем, конечно, да, но в том-то и дело, что продвинутый. Между потоками обмениваться сообщениями весьма удобно и гораздо проще, нежели callback'и городить. Вообще, все должно быть на своем месте. |
Flex Ferrum
|
опубликован 14-01-2002 14:54 MSK
За исключением того, что (в общем случае) программеру нужно будет реализовать механизм обмена сообщениями между потоками. А задачу эту нельзя назвать тривиальной. Я это к тому, что не всегда есть возможность опереться на API-шный механизм обмена сообщениями - для него окна нужны. |
michl_m
|
опубликован 14-01-2002 15:31 MSK
2Flex Ferrum: Ты забыл про PostThreadMessage. Очень классная функция - окна не надо, но все что касается очереди сообщений ( GetMessage, PeekMessage, WaitMessage, GetOueueStatus ) внутри принимающего потока работает с сообщениями, посланными PostThreadMessage. К тому-же "лишних" сообщений типа WM_PAINT поток просто не получает. |
gonzales
|
опубликован 14-01-2002 16:25 MSK
Извините ,но я тут недолго думая решил забить на этот изврат. Я просто сделал глобальную структурку с полем valid. Поток проверят значение valid и если оно TRUE вытаскивает из структурки тип задачи (Send ,Connect) выполняет.И делает valid=false. В структурке ещё есть lParam и wParam :)) Вообщем, что то типа сообщения только проще. Конечно механизм не самый надёжный но работает. Ещё была проблема с не срабатыванием OnReceive. Может кто-нить знает почему?Я забил на него и стал в потоке постоянно опрашивать socket : socket.receive(..);. И последнее . У меня получается что максимальное кол-во данных которые можно отправить- 32 байта.Может я наглючил?
|
gonzales
|
опубликован 14-01-2002 18:46 MSK
Я тут немного потрахался со своей прогой и выяснил, что серверу приходит столько , сколько я послал (не обязательно 32байта). Я использую CArchive и SocketFile. Когда я делаю In >> string1 (In это CArchive) то в string1 пишется гораздо меньше чем я прислал. Кто работал с CArchive ,подскажите в чём у меня проблема!! P.S. Какой максимальный размер данных ,который можно послать Send'ом. |
africa
|
опубликован 15-01-2002 11:07 MSK
Есть еще такие механизмы как: maislot, pipe. Попробуй завязать на них. |
necer
|
опубликован 16-01-2002 11:42 MSK
mailslot |
x
|
опубликован 17-01-2002 13:31 MSK
а мне вот Fibers нравится=с ними все получится совсем посто |
lamo
|
опубликован 19-01-2002 19:48 MSK
постараюсь без знаков.зы. совет: выбрось те сырцы и напиши как тебе советовали. не вяжись к ms api. зэтс ол. |