Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Потоки и Сокеты пара вопросов [D7, WinXP]


DVM ©   (2006-04-03 11:07:00) 

1. Вопрос:
Нет ли каких нюансов при использовании сокетов Windows в многопоточных приложениях? Имеется ввиду winsock (не VCL).
2. Вопрос:
GetMem и FreeMem - потокобезобасные функции? Дело в том, что мое многопоточное приложение немного нестабильно работало, пока я не обернул все их вызовы в критические секции. Хотя пременная IsMultithread была true.


DVM   (2006-04-03 16:30:00) [1]


> Сергей М. ©   (03.04.06 12:01) [2]


> Может и есть.
> Смотря о чем речь ..

Собственно, вызовы следующих функций во вторичных потоках не нуждается в каких-либо дополнительных действиях (например, оборачиванием в критические секции или еще что)
WSAStartUp(), socket(), CloseSocket(), send(), inet_addr(), select(), ioctlsocket(), recv()
Часто в литературе встречаю упоминания, что мол TClientSocket -потокобезопасный класс, а для использования winsock напрямую необходимо в многопоточном приложении предпринимать специальные меры. Но нигде не пишут какие. Сейчас у меня все работает и так.

> При IsMultithread = true - да, потокобезопасные.

Ясно.

> Это все равно что "немного беременная"..

:) Юмор ценю, но именно немного нестабильно. Ошибку можно было ждать сутками - и она возникала совершенно непредсказуемым образом. Чаще всего поток загибался без разговоров, выдачи сообщений и т.д. Иногда останавливался. Сейчас же работает.

> Формулировка темы вопроса вряд ли тянет на иное.

Отчасти согласен, не уточнил суть вопроса.


Сергей М.   (2006-04-03 12:01:00) [2]


> Нет ли каких нюансов при использовании сокетов Windows в
> многопоточных приложениях?


Может и есть.
Смотря о чем речь ..


> GetMem и FreeMem - потокобезобасные функции?


При IsMultithread = true - да, потокобезопасные.

Нет никакой нужды оборачивать эти вызовы в КС, поскольку тоже самое при установленном флаге IsMultithread делает сам менеджер памяти.


> приложение немного нестабильно работало


Это все равно что "немного беременная"..


> это как раз тема для ветки Начинающим


Формулировка темы вопроса вряд ли тянет на иное.


DVM   (2006-04-03 11:20:00) [3]

Ага, многопоточные приложения - это как раз тема для ветки Начинающим.


Наверх

Титульная страница Поиск, карта сайта Написать письмо