![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,372
|
![]()
CRITICAL_SECTION реентрантна, поэтому вызов EnterCriticalSection дважды из одного потока синхронизации не дает. Вы входите в секцию при первом нажатии кнопки, потом, пока ждете завершения потока, прокручиваете сообщения и получаете второе нажатие, в том же UI потоке, что и первое нажатие и входите в секцию второй раз, создаете второй поток и тд. Получаетеся, что UI инициализирует ваши данные второй раз, во время работы первого потока.
|
![]() |
![]() |
![]() |
#12 | |
БохЪ
Форумчанин
Регистрация: 30.09.2009
Сообщений: 724
|
![]()
waleri, да, я знаю. Именно поэтому я и попытался использовать синхронизацию потока с помощью флага. Но почему происходит зависание?
Цитата:
В планах порабощение вселенной...
Последний раз редактировалось zumm; 30.09.2013 в 12:12. |
|
![]() |
![]() |
![]() |
#13 |
Участник клуба
Регистрация: 04.04.2010
Сообщений: 1,554
|
![]()
Может флажок volatile ом сделать ?
|
![]() |
![]() |
![]() |
#14 | |
БохЪ
Форумчанин
Регистрация: 30.09.2009
Сообщений: 724
|
![]() Цитата:
В планах порабощение вселенной...
|
|
![]() |
![]() |
![]() |
#15 |
Участник клуба
Регистрация: 04.04.2010
Сообщений: 1,554
|
![]()
Ну специальная фигня такаяб что бы ничего хитро не закешировалось.
http://en.wikipedia.org/wiki/Volatile_variable |
![]() |
![]() |
![]() |
#16 |
БохЪ
Форумчанин
Регистрация: 30.09.2009
Сообщений: 724
|
![]()
the_deer_one, не вижу в этом смысла. Флаг не подвергается оптимизации компилятора.
В планах порабощение вселенной...
|
![]() |
![]() |
![]() |
#17 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,372
|
![]() |
![]() |
![]() |
![]() |
#18 |
БохЪ
Форумчанин
Регистрация: 30.09.2009
Сообщений: 724
|
![]()
waleri, такс... Не могли бы вы мне объяснить логику работы? При повторном нажатии на кнопку, куда идет UI поток? Он тормозит обработку первого вызова и переходит ко второму? Так? После обработки второго вывоза он возвращается к обработке первого вызова?
В планах порабощение вселенной...
|
![]() |
![]() |
![]() |
#19 | ||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,543
|
![]()
передлагаю рассмотреть такую схему работы
1. UI поток. с помощью кр. секции (или без нее) готовим данные. затем стартуем поток(пока БЕЗ блокировки). (с передачей! данных) 2. MY поток. СРАЗУ при старте! блокируем "свои" данные с помощью кр. секции. и считаем 3. UI периодически (таймер!!!) проверяем готовность расчета(блокировку данных). 4. MY поток заканчивает расчет и разблокирует "освобождаем" данные. 5. UI поток проверяем блокировку. принимаем и чистим. (на самом деле это другая ветвь п.3 ) если занято то выход иначе очистить Нет пляски с "петлей" (вся пляска "прячется" в таймер") . Нет никаких флагов, точнее таковым выступает сама критическая секция (для чего собственно она и предназначена)! А если потоку добавить функциональность по извещению UI о конце расчетов (CallBack функцию / PostMessage(WM_USER+... ) ), то и таймер становится не нужным. Offtop: О да при этом мы "перешли" от функциональной модели работы к "почти" событийной. Цитата:
Цитата:
Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 30.09.2013 в 14:28. |
||
![]() |
![]() |
![]() |
#20 |
Участник клуба
Регистрация: 04.04.2010
Сообщений: 1,554
|
![]()
а вариант с флагом и лупом почему не работал, на вид он стрёмный, но работать то должен хотя бы в большинстве случаев.
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Синхронизация | kuba1981 | PHP | 9 | 06.05.2013 11:39 |
Как получить доступ к методу потока(TThread) из основного потока? | Pcrepair | Общие вопросы Delphi | 3 | 30.03.2013 14:52 |
проблема при копировании одного столбца из одного файла в другой файл | tanunya | Помощь студентам | 0 | 24.02.2012 21:30 |
Должно быть 3 потока. А диспетчер задач показывает, что потока создано 2 | BEL9ILLI | Общие вопросы Delphi | 3 | 06.12.2011 20:26 |
Как узнать номер потока из самого потока? | GaMeSTeR | Помощь студентам | 0 | 03.12.2010 09:50 |