Сейчас на форуме: _MBK_, UniSoft, laslo, bartolomeo (+5 невидимых) |
eXeL@B —› Программирование —› Передача данных между локальными процессами |
<< . 1 . 2 . |
Посл.ответ | Сообщение |
|
Создано: 15 июля 2011 14:15 · Личное сообщение · #1 Задача: передавать небольшие порции данных между процессами; после передачи данные должны удаляться, чтобы не занимать память. Вопросы: использовать mailslot или pipe? есть ли различия, если не считать одно- и двух- направленность? с обоими надо использовать события? У Рихтера ни про одно ни про другое толком не написано( Несколько часов рылся в интернете - ни как не могу определиться) З.Ы. Использовать файлы не вижу смысла, данные небольшие, да и копить их смысла нет. З.Ы.Ы. или почта и пайп тоже накапливают данные? |
|
Создано: 08 августа 2011 15:32 · Поправил: Wishmaster-zanyat · Личное сообщение · #2 Во-первых свой косяк я нашёл: длинна пакета указывается в первом и частично во втором байтах, а не в первом. Во-вторых немного оффтопа: Code:
При этом в buff будут данные, readsize - размер данных, но при этом данные из сокета не изымаются. Далее можно проанализировать что пришло, выделить память нужного размера и прочитать хоть 10, хоть 20 байт и т.д. Так вот при анализе этого блока можно видеть сколько пакетов пришло за раз, и не всегда пакет один. Судя по тому, что я на основе указанной длинны пакета читаю только этот пакет, после выхожу из OnReceive и софтина не валится и не виснет - непрочитанные данные остаются таки в сокете. DenCoder Простите, мы институтов не кончали, всех технических формулировок не знаем, пишем программки для себя, денег на этом не зарабатываем. Мне удобно называть сокетом - я и назвал (надеюсь все поняли что я хотел спросить, а больше мне и не надо). И хочу спросить ещё один вопрос (для тех, кто работал на MFC с CSocket): может ли OnReceive вызваться если пришёл не весь пакет? Например в первом байте содержится 0х20, а Receive() вернула 0х10, возможна ли такая ситуация? |
|
Создано: 08 августа 2011 15:46 · Поправил: DenCoder · Личное сообщение · #3 Wishmaster-zanyat пишет: Простите, мы институтов не кончали дык я тоже, есть MSDN и google Wishmaster-zanyat пишет: OnReceive вызваться если пришёл не весь пакет? не может, если сокет Wishmaster-zanyat пишет: Например в первом байте содержится 0х20, а Receive() вернула 0х10, возможна ли такая ситуация? только если пакет так был передан, в ws2_32!send третьим аргументом длина. Если пакет сегментирован, то CAsyncSocket::Receive()->ws2_32!recv() не вернёт управление, пока весь пакет не соберёт или не возникнет ошибка. При ошибке принятая часть данных не доходит до пользовательского буфера. UPDATED ups... процесс может принять за раз несколько пакетов, если ожидаемая длина позволяет. ----- IZ.RU |
|
Создано: 08 августа 2011 17:37 · Личное сообщение · #4 |
<< . 1 . 2 . |
eXeL@B —› Программирование —› Передача данных между локальными процессами |
Эта тема закрыта. Ответы больше не принимаются. |