HLFX.Ru Forum
Показать все 5 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- синхронизация vcl + потоки (https://hlfx.ru/forum/showthread.php?threadid=3124)


Отправлено marikcool 02-12-2011 в 08:01:

синхронизация vcl + потоки

Такая задача, есть vcl форма и отдельный udp поток, где и работает вся логика/прием/передача приложения.
Необходимо наиболее эффективно передать часть обновленных данных с udp потока в форму ( чтобы поток не ждал отрисовки формы) , думаю создать стэк сообщений обрамленный критической секцией, с потока писать в секцию, отправлять пост сообщение форме, она забирает все что в стеке ну и перересовывается. Немогу найти инфы как делают это в дургих приложенияъ, есть идеи получше или более верное решение данной задачи?


Отправлено Scrama 02-12-2011 в 08:21:

Поток как создаешь? Через vcl-класс или через _beginthreadex? В первом случае есть vcl-ный же механизм синхронизации, во втором нужно как-то иначе изголяться - у меня там просто промежуточный класс, в котором очередь сообщений, с одной стороны пополняется потоком из пайпов, с другой выгребается потоком остальной логики. Не уверен, что в таком случае не может быть косяка из-за одновременного удаления/записи в очередь, но пока что глюков не было.

__________________
"Злобным гениям не нужна харизма." © Shooter__Andy
"Making stuff for an "old ugly game" can be ten times more fun than grinding on a map for a dull, next-gen title." © Lunaran


Отправлено marikcool 02-12-2011 в 08:39:

vcl синхронизация это sendmessage, тут потоку придется зависнуть и ждать пока форма отрисуется.
без ожидания результата можно отправлять postmessage, но передать можно указатель, ну или любые данные весом 2 байта.

ну у меня что то как в твоем случае, вот счас пишу как раз промежуточный класс стэк, но помещу его в критическую секцию.
если у тебя глюков нет то либо все шустро работает либо класс который используешь потокобезопасный.

еще интересует точный ответ, можно ли без последствий писать в один удп сокет данные с разных потоков? у меня на практике все работает но бывает редко косяки, просто если есть глюки 1 на 1000000 то переделаю.


Отправлено Scrama 03-12-2011 в 12:35:

Цитата:
marikcool писал:
можно ли без последствий писать в один удп сокет данные с разных потоков?
Заведи индикатор занятости сокета, устанавливай его потоками и не пиши, если занято. Но ваще сокеты на vcl - не труъ. vcl вообще не труъ, разве что гуй для dll нарисовать.

__________________
"Злобным гениям не нужна харизма." © Shooter__Andy
"Making stuff for an "old ugly game" can be ten times more fun than grinding on a map for a dull, next-gen title." © Lunaran


Отправлено marikcool 03-12-2011 в 12:50:

Цитата:
Scrama писал:
Заведи индикатор занятости сокета, устанавливай его потоками и не пиши, если занято. Но ваще сокеты на vcl - не труъ. vcl вообще не труъ, разве что гуй для dll нарисовать.

сокеты у меня напрямую с winsock работают без оберток.
компоненты я только для gui использую.
просто читал инфу что sendto можно с разных потоков вызывать ничего не будет, убедиться бы.


Временная зона GMT. Текущее время 15:23.
Показать все 5 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024