|
|
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
пишется простенький DCOM-сервис с использованием midas'а. в нем фабрикой создаются экземпляры класса TDCOMmodule = class(TRemoteDataModule, IMyServ) при этом, у этого сервиса есть ещё и GUI-окно, оно же MainForm. мне нужно из экземпляра класса TDCOMmodule отправить сообщение этому окошку. если использовать из потока в котором живёт TDCOMmodule вызов Код: pascal 1. это будет безопасно? нет ли подводных камней? или есть что-то более правильное для передачи информации "главному потоку"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2018, 18:24 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
неглавныйэто будет безопасно? Это будет настолько безопасно насколько программист понимает что делает. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2018, 18:40 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovнеглавныйэто будет безопасно?Это будет настолько безопасно насколько программист понимает что делает.ну, я не настоящий сварщик, я только учусь. если тут есть где споткнуться, подскажите пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2018, 18:49 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
неглавный, Посмотри код wadman`a в соседней, недавно поднятой ветке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2018, 18:55 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
DarkMasterПосмотри код wadman`a в соседней, недавно поднятой ветке.это там где 17 страниц ветка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2018, 19:37 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
неглавный, а в качестве WParam, LParam что отправляешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2018, 20:00 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
неглавный, В межпоточном обмене основных подводных камней - два: синхронизация и время валидности параметров, переданных по сслылке. PostMessage - потокобезопасен. Ты положил сообщение в очередь и пошел дальше. Если ты будешь передавать некие значения, которые влезут по размеру wParam и lParam, то это безопасно. Если же тебе надо передать что-то большее(доблы, строку, структуру, объект), то нужно озаботиться валидностью экземпляра и его потобезопасностью на момент выборки сообщений. Как - зависит от твоих хотелок и задумок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2018, 22:09 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
Олег ТретьяковPostMessage - потокобезопасен. имхо, как раз PostMessage, потокоНЕбезопасен, если ты передаешь указатель, валидность которого будет потеряна к моменту, когда он будет извлечен из очереди сообщений для обработки основным потоком. А вот SendMessage, наоборот, не даст потоку продолжиться дальше (и завершиться), пока сообщение не будет обработано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2018, 01:07 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
ДокОлег ТретьяковPostMessage - потокобезопасен. имхо, как раз PostMessage, потокоНЕбезопасен, если Это персональные тонкости мировосприятия или уже устал и не вник? Олег Третьяковто нужно озаботиться валидностью экземпляра и его потобезопасностью на момент выборки сообщений. - для способа с PostMessage Он может уже и не нужен в контексте потока - обработался, выплюнулся. Допустима и\или нужна блокировка потока-исполнителя? Ну дык и SendMessage в руки. Ты телепат? Я - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2018, 01:34 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
ДокОлег ТретьяковPostMessage - потокобезопасен. имхо, как раз PostMessage, потокоНЕбезопасен, если ты передаешь указатель, валидность которого будет потеряна к моменту, когда он будет извлечен из очереди сообщений для обработки основным потоком. А вот SendMessage, наоборот, не даст потоку продолжиться дальше (и завершиться), пока сообщение не будет обработано. Во-первых, никто не мешает испортить валидность после SendMessage. Дурковать так дурковать. Во-вторых - нафига такие multi-threaded приложения, если вызывающая нить будет ждать завершения задания в вызываемой. В третьих, да, случаи могут быть разными, к чему такая категоричность. В четвертых, SendMessage из другой нити не просто блокируется в ожидании ответа, а в процессе ожидания продолжает обрабатывать некоторые входящие сообщения и получить удивительное поведение в отдельных случаях. Если ты, конечно, не вызывал SendMessageTimeout с SMTO_BLOCK, о чем ты не упомянул. В пятых, PostMessage как апишная функция MS Windows- потокобезопасен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2018, 01:47 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
Спасибо всем за пояснения. Картина проясняется. Передавать планмруется небольшие структуры по ссылке. Поясните пожалуйста, почему ссылка может стать невалидной? Как этого избежать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2018, 16:04 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
неглавныйСпасибо всем за пояснения. Картина проясняется. Передавать планмруется небольшие структуры по ссылке. Поясните пожалуйста, почему ссылка может стать невалидной? Как этого избежать? Глупости, не обращай внимания. ... Тред-передатчик: в куче выделяет память под структуру. Копирует в выделенную память нужные данные. Передает ссылку в другую нить (например так, как ты собирался). После обработки данных, тред-приемник освобождает память, ссылку на которую ему передал передали. Возможные глюки: очередь сообщений не бесконечная, если приемник не будет успевать обработать - сообщения потеряются. Если структура крошечная, не более размера параметров сообщения - передавай данные прямо в параметрах, без ссылки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2018, 16:17 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
Спасибо. :) Структурые небольшие, но в параметры не влезут. Какой менеджер памяти нужно использовать: достаточно стандартного Дельфийского, или нужно Виндовый? Интенсивность передачи оных сообщений невелика. Переполнение очереди маловероятно. Да и ценность сообщений тоже не критична - по большей части информационная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2018, 16:36 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
неглавный, любой менеджер, лишь бы выделение памяти и освобождение в одном и том же делалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2018, 16:57 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
чччД, спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2018, 17:01 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. Тоже безопасно... Иногда не без удовольствием пользуюсь им :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2018, 00:33 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
TThreadedQueue<T> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2018, 01:39 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
чччДВ пятых, PostMessage как апишная функция MS Windows- потокобезопасен. Каким макаром? чччДнеглавный, любой менеджер, лишь бы выделение памяти и освобождение в одном и том же делалось. Ерунда. Выделил в одном потоке, переслал второму, тот получил и удалил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2018, 11:26 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
Василий 2Ерунда. Выделил в одном потоке, переслал второму, тот получил и удалил В одном и том же менеджере, ваш Кэп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2018, 12:07 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
Василий 2Ерунда. Выделил в одном потоке, переслал второму, тот получил и удалилА есть гарантия, что адресат это сообщение в результате получит, обработает и удалит то, что требуется удалить? Когда SendMessage, там понятно, а PostMessage не дожидается ответа, пуляет и уходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2018, 13:07 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
alekcvpВ одном и том же менеджере, ваш Кэп. Тогда да. Спасибо, Кэп! V.BorzovА есть гарантия, что адресат это сообщение в результате получит, обработает и удалит то, что требуется удалить? Когда SendMessage, там понятно, а PostMessage не дожидается ответа, пуляет и уходит. Не получить он может только в одном случае - если оно не отправится. А для этого достаточно вспомнить, что PostMessage это функция ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2018, 14:32 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
Василий 2alekcvpВ одном и том же менеджере, ваш Кэп. Тогда да. Спасибо, Кэп! V.BorzovА есть гарантия, что адресат это сообщение в результате получит, обработает и удалит то, что требуется удалить? Когда SendMessage, там понятно, а PostMessage не дожидается ответа, пуляет и уходит. Не получить он может только в одном случае - если оно не отправится. А для этого достаточно вспомнить, что PostMessage это функция Ты не видишь разницы между фактом получения сообщения из очереди и фактом его обработки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2018, 14:45 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
Василий 2Не получить он может только в одном случае - если оно не отправится. Ложь и провокация. В любой момент цикл обработки очереди может завершиться по обычно непредсказуемым для вызывателя PostMessage причинам, не обработав при этом такие и все остальные другие сообщения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2018, 14:47 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
Василий 2, И что возвращает функция PostMessage? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2018, 14:49 |
|
||
|
отправить сообщение "главному потоку" из "дочернего"
|
|||
|---|---|---|---|
|
#18+
V.BorzovВасилий 2Ерунда. Выделил в одном потоке, переслал второму, тот получил и удалилА есть гарантия, что адресат это сообщение в результате получит, обработает и удалит то, что требуется удалить? Когда SendMessage, там понятно, а PostMessage не дожидается ответа, пуляет и уходит. Более того, при переполнении очереди сообщений - PostMessage() просто обламывается и ничего не шлет. Т.е. возможна ситуация, когда адресат просто ничего не получит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2018, 14:50 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39623722&tid=2041039]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
172ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 466ms |

| 0 / 0 |
