Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
6-76550
Max2002
2003-02-03 13:16
2003.03.24
Загрузка документа по ссылке


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


8-76526
Atomic
2002-12-10 03:46
2003.03.24
Проблема с Canvas


14-76572
Sergei
2003-03-09 10:44
2003.03.24
Сохранение настроек проекта


7-76702
Vlad_503
2003-01-30 21:20
2003.03.24
Работа со сканером





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский