Такая задача, есть vcl форма и отдельный udp поток, где и работает вся логика/прием/передача приложения.
Необходимо наиболее эффективно передать часть обновленных данных с udp потока в форму ( чтобы поток не ждал отрисовки формы) , думаю создать стэк сообщений обрамленный критической секцией, с потока писать в секцию, отправлять пост сообщение форме, она забирает все что в стеке ну и перересовывается. Немогу найти инфы как делают это в дургих приложенияъ, есть идеи получше или более верное решение данной задачи?
Поток как создаешь? Через vcl-класс или через _beginthreadex? В первом случае есть vcl-ный же механизм синхронизации, во втором нужно как-то иначе изголяться - у меня там просто промежуточный класс, в котором очередь сообщений, с одной стороны пополняется потоком из пайпов, с другой выгребается потоком остальной логики. Не уверен, что в таком случае не может быть косяка из-за одновременного удаления/записи в очередь, но пока что глюков не было.
vcl синхронизация это sendmessage, тут потоку придется зависнуть и ждать пока форма отрисуется.
без ожидания результата можно отправлять postmessage, но передать можно указатель, ну или любые данные весом 2 байта.
ну у меня что то как в твоем случае, вот счас пишу как раз промежуточный класс стэк, но помещу его в критическую секцию.
если у тебя глюков нет то либо все шустро работает либо класс который используешь потокобезопасный.
еще интересует точный ответ, можно ли без последствий писать в один удп сокет данные с разных потоков? у меня на практике все работает но бывает редко косяки, просто если есть глюки 1 на 1000000 то переделаю.
marikcool писал: можно ли без последствий писать в один удп сокет данные с разных потоков?
Заведи индикатор занятости сокета, устанавливай его потоками и не пиши, если занято. Но ваще сокеты на vcl - не труъ. vcl вообще не труъ, разве что гуй для dll нарисовать.
Scrama писал: Заведи индикатор занятости сокета, устанавливай его потоками и не пиши, если занято. Но ваще сокеты на vcl - не труъ. vcl вообще не труъ, разве что гуй для dll нарисовать.
сокеты у меня напрямую с winsock работают без оберток.
компоненты я только для gui использую.
просто читал инфу что sendto можно с разных потоков вызывать ничего не будет, убедиться бы.