|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
30.09.2013, 11:59 | #11 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,330
|
CRITICAL_SECTION реентрантна, поэтому вызов EnterCriticalSection дважды из одного потока синхронизации не дает. Вы входите в секцию при первом нажатии кнопки, потом, пока ждете завершения потока, прокручиваете сообщения и получаете второе нажатие, в том же UI потоке, что и первое нажатие и входите в секцию второй раз, создаете второй поток и тд. Получаетеся, что UI инициализирует ваши данные второй раз, во время работы первого потока.
|
30.09.2013, 12:02 | #12 | |
БохЪ
Форумчанин
Регистрация: 30.09.2009
Сообщений: 724
|
waleri, да, я знаю. Именно поэтому я и попытался использовать синхронизацию потока с помощью флага. Но почему происходит зависание?
Цитата:
В планах порабощение вселенной...
Последний раз редактировалось zumm; 30.09.2013 в 12:12. |
|
30.09.2013, 12:23 | #13 |
Участник клуба
Регистрация: 04.04.2010
Сообщений: 1,554
|
Может флажок volatile ом сделать ?
|
30.09.2013, 12:27 | #14 | |
БохЪ
Форумчанин
Регистрация: 30.09.2009
Сообщений: 724
|
Цитата:
В планах порабощение вселенной...
|
|
30.09.2013, 12:41 | #15 |
Участник клуба
Регистрация: 04.04.2010
Сообщений: 1,554
|
Ну специальная фигня такаяб что бы ничего хитро не закешировалось.
http://en.wikipedia.org/wiki/Volatile_variable |
30.09.2013, 12:45 | #16 |
БохЪ
Форумчанин
Регистрация: 30.09.2009
Сообщений: 724
|
the_deer_one, не вижу в этом смысла. Флаг не подвергается оптимизации компилятора.
В планах порабощение вселенной...
|
30.09.2013, 13:21 | #17 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,330
|
|
30.09.2013, 13:23 | #18 |
БохЪ
Форумчанин
Регистрация: 30.09.2009
Сообщений: 724
|
waleri, такс... Не могли бы вы мне объяснить логику работы? При повторном нажатии на кнопку, куда идет UI поток? Он тормозит обработку первого вызова и переходит ко второму? Так? После обработки второго вывоза он возвращается к обработке первого вызова?
В планах порабощение вселенной...
|
30.09.2013, 13:58 | #19 | ||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
передлагаю рассмотреть такую схему работы
1. UI поток. с помощью кр. секции (или без нее) готовим данные. затем стартуем поток(пока БЕЗ блокировки). (с передачей! данных) 2. MY поток. СРАЗУ при старте! блокируем "свои" данные с помощью кр. секции. и считаем 3. UI периодически (таймер!!!) проверяем готовность расчета(блокировку данных). 4. MY поток заканчивает расчет и разблокирует "освобождаем" данные. 5. UI поток проверяем блокировку. принимаем и чистим. (на самом деле это другая ветвь п.3 ) если занято то выход иначе очистить Нет пляски с "петлей" (вся пляска "прячется" в таймер") . Нет никаких флагов, точнее таковым выступает сама критическая секция (для чего собственно она и предназначена)! А если потоку добавить функциональность по извещению UI о конце расчетов (CallBack функцию / PostMessage(WM_USER+... ) ), то и таймер становится не нужным. Offtop: О да при этом мы "перешли" от функциональной модели работы к "почти" событийной. Цитата:
Цитата:
Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 30.09.2013 в 14:28. |
||
30.09.2013, 14:24 | #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 |