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

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

Посылка строки из TThread в основной поток [D7, XP]


Страницы:   1 2

дед Маздай ©   (2008-11-13 11:30:00) 

Каким образом реализовать сабж? Имеется в виду посылка через SendMessage.
И как реализовать механизм при котором несколько потоков не портили бы посылаемую строку?


дед Маздай   (2008-11-13 14:48:00) [21]

Хотя, если я правильно понимаю, при SendMessage строа не сможет затереться, ведь пока не будет обработано сообщение мы в поток не вернемся, точнее не продолжится работа потока.

На самом деле, это не реальная задача. Я просто изучаю работу с потоками. С синхронизацией через Sinchronize разобрался. Теперь вот через посылку сообщений делал, но видимо задачу не правильно подобрал, т.к эта, конечно же, решается проще именно через Sinchronize.

Есть ли где-нибудь, типа задачника что-то, про потоки, что бы порешать?

Но с очередью всеравно сделаю ;)


дед Маздай   (2008-11-13 14:31:00) [22]

Ага, спасибо. Реализую тогда в таком виде.


Ega23   (2008-11-13 14:11:00) [23]


> То есть, надо создать обычный StringList и два потокозащищенных
> метода - AddString и RemoveString.


тогда уж PushString и PopString, как это в FIFO принято...


Юрий Зотов   (2008-11-13 14:03:00) [24]

> дед Маздай   (13.11.08 11:30)  

> как реализовать механизм при котором несколько потоков не портили бы
> посылаемую строку?

Потокозащищенный список строк (очередь). Пришедшая строка добавляется в конец списка, а на обработку извлекается первая строка в списке (и после обработки из списка удаляется).

Тогда и сообщений никаких не надо - каждый поток просто добавляет свою строку в список, а главный (или какой-то еще) поток извлекает их оттуда, обрабатывает и удаляет. Кстати, и строки гарантированно не будут умирать раньше, чем будут обработаны.

То есть, надо создать обычный StringList и два потокозащищенных метода - AddString и RemoveString.


Ega23   (2008-11-13 13:48:00) [25]


> с постом стремно. строка на момент обработки сообщения может
> быть уже мертва


Если она не локальная переменная, то с фига-ли?
Хотя надо смотреть, как реаллок работает...


дед Маздай   (2008-11-13 13:38:00) [26]

Да? Действительно? Я думал об этом, ведь не случано же появилась вторая часть вопроса в [0]


Поросенок Винни-Пух   (2008-11-13 13:05:00) [27]

с постом стремно. строка на момент обработки сообщения может быть уже мертва


дед Маздай   (2008-11-13 12:47:00) [28]

Юрий Зотов © (13.11.08 12:24) [7]

Спасибо, Юрий за расжевывание.


Юрий Зотов   (2008-11-13 12:24:00) [29]

> дед Маздай   (13.11.08 11:59) [5]

1. Можно и проще - Integer(SomeStr). В Delphi переменная типа String - это по сути указатель и его значение можно передавать, как целое число.

2. Если тормозить поток не надо, используйте PostMesage.


дед Маздай   (2008-11-13 12:05:00) [30]

Сергей М. © (13.11.08 11:54) [4]

Нет, не обязательно. Да я, собственно, нигде этого и не утвеждал. ;)


дед Маздай   (2008-11-13 11:59:00) [31]

Поросенок Винни-Пух © (13.11.08 11:37) [2]

Да, действительно раборает. А я все пытался указатель передать, типа integer(@somestr) ну и конечно это не работало.


Сергей М.   (2008-11-13 11:54:00) [32]


> дед Маздай   (13.11.08 11:50) [3]


А "тормозить" работу доп.потока при этом обязательно ?
Ведь SendMessage - функция, предполагающая синхронное блокирующее исполнение, в отличие от, например, PostMessage ..


дед Маздай   (2008-11-13 11:50:00) [33]

Сергей М. © (13.11.08 11:36) [1]

Предполагается выводить ее как информацию о работе потока. Например, "Значение 1: 1  -  Значение 2: 2  -  Значение 3: 3" и т.п.


Поросенок Винни-Пух   (2008-11-13 11:37:00) [34]

SenMessage(handle,my_message,WParam(PChar(string)),0)


Сергей М.   (2008-11-13 11:36:00) [35]


> дед Маздай   (13.11.08 11:30)  


А что предполагается делать с переданной строкой в осн.потоке, после того как он ее получит ?


Страницы:   1 2

Наверх

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