Форум: "Основная";
Текущий архив: 2003.03.24;
Скачать: [xml.tar.bz2];
ВнизOpenDialog порождает дополнительные потоки Найти похожие ветки
← →
Игорь Шевченко (2003-03-11 14:29) [0]Неожиданно всплыла такая особенность - после открытия OpenDialog в программе на Delphi TaskManager показывает увеличение числа потоков у процесса, после закрытия OpenDialog число потоков не уменьшается. При этом, открытие аналогичного диалога в Notepad к росту числа потоков не приводит.
Кто-нибудь может объяснить/ткнуть носом в механизм этого явления ?
← →
REA (2003-03-11 14:46) [1]Действительно так, но почему-то не всегда. У меня на одном приложении эффект есть, а на другом нет. В чем разница - не пойму. Версия Delphi вроде та же...
← →
Fiend (2003-03-11 14:54) [2]да хто его знает, судя по всему потоки порождаются кодом из comdlg32.dll
А что из-за этого какая то проблэма появилась?
← →
Игорь Шевченко (2003-03-11 15:41) [3]Fiend © (11.03.03 14:54)
> А что из-за этого какая то проблэма появилась
Внимательно читаем вопрос: "объяснить/ткнуть носом в механизм этого явления".
← →
REA (2003-03-11 15:44) [4]Сдается мне, что таки да - это где-то в дебрях comctl, поскольку для других диалогов типа цвета или принтера оно не проявляется, а в коде DoExecute ничего криминального не заметно...
← →
Clickmaker (2003-03-11 15:47) [5]Объяснить не могу, но подозреваю, что этот поток создает сама виндозная оболочка для обновления списка файлов и иконок в диалоге в фоновом режиме или для слежения для содержимым каталога (FindFirstChangeNotification)
← →
REA (2003-03-11 15:47) [6]Нажал кнопочку открытия файла в эксплорере - эффект имеет место быть.
← →
Игорь Шевченко (2003-03-11 16:11) [7]Clickmaker © (11.03.03 15:47)
Тогда разумным было бы предположить, что по закрытии OpenDialog этот поток завершится. А он, подлый, не завершается. Кроме того, если взять блокнот, и вызвать в нем открытие файла, то дополнительных потоков не появляется. Мне б хоть место в MSDN или где еще найти :-)))))
← →
REA (2003-03-11 16:13) [8]Видимо зависит от каких-то свойств диалога, а не удаляется по причине кэширования потоков. Но это все домыслы.
← →
Fiend (2003-03-11 16:18) [9]То Игорь Шевченко:
а вот и неправда про блокнот. у меня кол-во потоков выросло так же на три как и для моего приложения.
Про проблэму: я просто подумал, шо часто вопросы возникают из-каких то проблем, дальше понятно....
← →
Clickmaker (2003-03-11 16:19) [10]Запустил блокнот, сказал Ctrl+0 - появилось аж целых 3 потока и после закрытия диалога они не исчезли
← →
Дмитрий Баранов (2003-03-11 17:16) [11]+ 4 потока
В самом деле, скорей всего диалоговое окно юзает какие-то COM-объекты оболочки Win (IShellFolder, IShellView и т.п. с потоковой моделью SingleThreaded), которые и плодят потоки, а после закрытия диалога это добро где-то на всякий случай кэшируется.
← →
Игорь Шевченко (2003-03-11 17:16) [12]Экперимент показал:
система NT4/SP6 - запускается блокнот - один поток. Вызывается OpenDialog по File/Open - один поток. В диалоге нажимается стрелка для перехода в каталог верхнего уровня - два потока. Закрываю OpenDialog - опять один поток.
система XP - запускается блокнот - два поток. Вызывается OpenDialog по File/Open - 5 потоков. После закрытия OpenDialog остается 3 потока со временем.
:-)))
← →
Delirium^.Tremens (2003-03-11 17:21) [13]Для чистоты эксперимента нужно бы свой вызов соорудить с заведомо корректным освобождением ресурсов.
:-)
← →
Игорь Шевченко (2003-03-11 17:27) [14]Delirium^.Tremens © (11.03.03 17:21)
Блокнот, стало быть, некооректно их освобождает ? :-)
Свой вызов из программы на Delphi под NT4 сразу порождал поток при открытии OpenDialog. Который при закрытии не уничтожался, если не был указан, как отметил Fiend, флажок OldStyleDialog.
← →
Delirium^.Tremens (2003-03-11 17:35) [15]
> если не был указан, как отметил Fiend, флажок OldStyleDialog
А это уже совсем другая история(с)
:-)
← →
Игорь Шевченко (2003-03-12 10:16) [16]С один потоком разобрался - отслеживание сетевых дисков, подключений, отключений и т.д.
А вот откуда в WinXP берется еще два потока (при вызове OpenDialog число потоков увеличивается на 3) до сих пор остается загадкой :-)
← →
vedmed (2003-03-12 10:22) [17]>А вот откуда в WinXP берется еще два потока...
Нужно же чем-то занять процессоры с технологией HyperThreading 8-)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.03.24;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c