![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Emura |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 7.2.2009 Репутация: 1 Всего: 1 |
всем привет!
подскажите пожалуйста со следующим глючком. - кидаем папку из эксплорера в окно (IDropTarget). - обрабатываем файлы из папки(специфика программы). окно эксплорера (откуда бралась папка) подвисает на время обработки. IDropTarget::Drop такого вида. IDropTarget::Drop(...) { извлекаем путь папки PostMessage( путь папки, ...); } из функции IDropTarget::Drop() успешно выходим перед тем как приходит сообщение от PostMessage, т.е. блокировать обработка не должна.. но.. многопоточности нет, XP. всё дело встало, подскажите кто догадается, спасибо тестовый проект
Это сообщение отредактировал(а) Emura - 20.1.2011, 04:24 |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
поток-то все равно один, поэтому если эксплорер ждет какой-то синхронной с очередью сообщений реакции после Drop,
то он и будет висеть, пока WM_MAGIC не вернется можно попробовать 2 варианта: 1. поставить в Drop таймер на несколько мс (чтобы отвязаться от эксплорера), на который, после срабатывания повесить обработку или посылку WM_MAGIC 2. пустить новый или возобновляющийся поток, исполняющий работу WM_MAGIC -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Emura |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 7.2.2009 Репутация: 1 Всего: 1 |
GremlinProg,
да уж, думалось что PostMessage спасет, а получается что нет.. по поводу таймера, самому пришла такая идея в голову, да только как-то и так везде использую таймеры.. таймеры, которые уже ассоциируются с костылями... на счет дополнительного потока хз.. для такой "мелочи".. попробую очередной ннннн-ый таймер интересную особенность заметил, если во время блока обработки( в тесте блок WM_MAGIC) выскакивает мессаджбокс(вызываемый алгоритмом обработки), то explorer размораживается.. магия виндовс блин Это сообщение отредактировал(а) Emura - 20.1.2011, 12:11 |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
это нормально, просто мессаджбокс имеет свой цикл обработки сообщений, поэтому любой вызов MessageBox или DialogBox в такой момент будет продолжать работу первичного цикла сообщений потока (того самого, который висит) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Emura |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 7.2.2009 Репутация: 1 Всего: 1 |
GremlinProg, очередной респект! таймер помог.
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |