|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
14.06.2015, 15:07 | #1 |
Пользователь
Регистрация: 20.03.2009
Сообщений: 99
|
Нужен Ваш совет.
Немогу сообразить как правильно сделать. Есть 1 дополнительный поток (второй это главный) есть глобальная переменная опубликованная в главном потоке Так вот как только её пытаешься изменить из доп. потока, вываливается AV изменить я буду через PostMessage из доп. потока Но дело в том что необходимо перед изменением этой переменной узнать её состояние. например так Код:
или как правильно узнать состояние переменной из другого потока P.S. Немного не правильно пример привел Код:
Последний раз редактировалось Stilet; 14.06.2015 в 17:11. |
14.06.2015, 16:46 | #2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 19,042
|
А чем синхронизация пугает? Выполнил postmessage, сообщение стало в очередь в основном потоке, пока суть да дело дошла наконец очередь до обработки его, то есть изменение значение. И в это время доп.поток нахально требует без всякой синхронизации это самое значение. Догадайся с трех раз что будет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
14.06.2015, 17:11 | #3 |
Пользователь
Регистрация: 20.03.2009
Сообщений: 99
|
Значит примерно так
Код:
Подскажите еще как можно изменить переменную объявленную в Thread1 из потока Thread2 если Thread1 иногда сам её изменяет или читает, ведь Synchronize() это выполнение кода внутри главного потока Последний раз редактировалось Stilet; 14.06.2015 в 18:17. |
14.06.2015, 18:13 | #4 | |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,656
|
Цитата:
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
|
14.06.2015, 20:01 | #5 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 902
|
Еще можно синхронизацию между потоками сделать с помощью Event.
Пример на ваших данных, поток без класса, можете для себя переделать, если потоки будут грузить процессор можете сделать в работе потока еще одно прерывание либо sleep либо еще event. Пока непонятно что вы хотите отображать в потоках/ Ну это я так для примера сделал. Передача параметров в потоках происходит через TProcess = record Код:
Последний раз редактировалось Aliens_wolfs; 14.06.2015 в 20:27. |
14.06.2015, 20:06 | #6 |
Пользователь
Регистрация: 20.03.2009
Сообщений: 99
|
Упфффф..... стойте стойте, дайте разобраться... И почему тут нет смайла с пистолетом у виска
|
14.06.2015, 20:24 | #7 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,792
|
Цитата:
А что именно ты там пишешь, если не секрет? Для чего тебе понадобились критические секции то?
I'm learning to live...
|
|
14.06.2015, 20:28 | #8 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 902
|
Да да хотелось бы узнать для чего тебе такая работа потоков нужна
|
14.06.2015, 20:33 | #9 | |
Пользователь
Регистрация: 20.03.2009
Сообщений: 99
|
Цитата:
один поток будет проверять параметры этой лицензии второй поток вести учет времени работы программы второй поток должен обновлять переменную которая содержится в первом потоке а первый поток иногда поглядывать не изменилась ли та самая переменная хех))) С потоками работаю впринципе давно, но вроде всё устраивало, а тут думаю дай еще раз почитаю, и на тебе влез в дебри многопоточности, теперь вылезти не получается, сижу читаю про TCriticalSections открыто уже 3 экземпляра DXE5. Смотрите! Если третий поток должен изменять переменную которую содержит второй поток значит критическую секцию нужно создавать именно во втором или третьем потоке? или это не важно? Можно ли её создать в главном потоке? а использовать во втором и в третьем при проверке и записи параметров Можно ли использовать вместо Synchronize CS? Последний раз редактировалось Stilet; 14.06.2015 в 22:30. |
|
16.06.2015, 02:57 | #10 |
Пользователь
Регистрация: 13.08.2008
Сообщений: 76
|
А просто через указатель нельзя узнать? Вынести переменную за поток, до начала потока передать указатель и потом смотреть сколько душе угодно?
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проверить состояние потока своей функцией | Shouldercannon | Общие вопросы Delphi | 6 | 01.10.2013 09:56 |
Узнать состояние TPopupMenu | Alter | Компоненты Delphi | 2 | 07.03.2011 13:21 |
Как узнать номер потока из самого потока? | GaMeSTeR | Помощь студентам | 0 | 03.12.2010 09:50 |
Узнать состояние кнопок мыши | Cold_Night | Общие вопросы Delphi | 3 | 07.06.2009 21:36 |
Узнать состояние подключения | Hottabych | Работа с сетью в Delphi | 8 | 03.03.2008 18:10 |