На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Соблюдайте общие правила форума
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Указывайте точные версии Delphi и используемых сетевых библиотек.

Не приветствуется поднятие старых тем. Если ваш вопрос перекликается со старой темой, то для вопроса лучше создать новую тему, а старую указать в первом сообщении с описанием взаимосвязи.

Внимание:
попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

Модераторы: Krid, Rouse_
  
> Нужна ли критическая секция при вызове send() или sendto() ?
    Доброй ночи.
    Один сокет, одно соединение между клиентом и сервером. В приложении несколько потоков, которые могут в любой момент отправлять данные через SendTo() либо Send() (сокет - глобальная переменная). Можно ли это делать из разных потоков, ставит ли winsock эти вызовы в очередь либо там нужны критические секции и их отсутствие может быть причиной вылета приложения?
      Разумеется, в winsock все схвачено. Другое дело, что сокет может быть блокируемым или неблокируемым. В случае неблокируемого сокета одновременный многопоточный send может привести к мешанине переданных данных из разных потоков, но непосредственно к вылету приложения это привести не может (т.к. непосредственная запись порций данных в буфер winsock по любому синхронизирована).
      Если же работа с сокетом производится не через АПИ, а через дельфийские классы-обертки, то в принципе возможны и серьезные конфликты, если коряво написаны обработчики событий типа OnSend и т.п.
        Голое API, Indy не признаю.
        Мешанина не помешает, вопрос был только в возможности одновременного вызова send или sendto на один сокет из разных потоков.
        Обратно данные получает и обрабатывает отдельный поток, порядок не важен главное содержание. У меня несколько участков кода которые возможно требуют критической секции, кто-то из них дает редкие сбои. Код писал два года назад потому разбираюсь по сути заново.

        Значит, можно.
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0172 ]   [ 17 queries used ]   [ Generated: 19.03.24, 05:33 GMT ]