Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.24;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.016 c
14-76574
SkyQuake
2003-03-09 13:13
2003.03.24
Замена MS Help WorkShop


3-76337
Солер
2003-03-03 19:16
2003.03.24
Фильтр и combobox


14-76651
aga
2003-03-08 14:44
2003.03.24
Объект


7-76675
leon 777
2003-01-27 13:59
2003.03.24
Нужна помощь по флагам и реестру


1-76405
__Oleg
2003-03-13 13:35
2003.03.24
Выбор директории