Непонятки с SHBrowseForFolder

Тема в разделе "WASM.WIN32", создана пользователем MirrorBlack, 7 май 2009.

  1. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    При использовании с флагом BIF_NEWDIALOGSTYLE чертовщина творится...
    В памяти (после завершения функции) остаются три потока висеть.
    Пробовал даже IUnknown освободить - безрезультатно.
    Кто знает почему остаются потоки?
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Дык они и при вызове GetOpenFileName и т.п. создаются и также продолжают "висеть" какое-то время, затем неспеша "отваливаются" по одному, но в рез-те один доп.поток все равно остается. Видимо мелкософты так решили - раз ты один раз вызвал эксплорер, то наверняка вызовешь еще, поэтому незачем "по сто раз" к нему коннектиться :)
     
  3. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    leo
    Не согласен.
    Раз задействуются COM интерфейсы, то должны быть методы их освобождения.
    Странно конечно, но после Release предоставляемого IUnknown ничего не выгружается.
     
  4. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Не согласен - пиши жалобу в майкрософт или подавай иск в международный суд :lol:

    Чего тут странного - IUnknown может иметь множество ссылок и пока все не релизишь ничего не выгрузится, а винда наверняка у себя ссылку "в заначке" держит ;) Обычная виндовая практика работы с хэндлами - пока все не закроются, объект не уничтожится. Пример с CreateThread - если хэндл потока не нужен, то его можно сразу закрыть, но сам поток при этом ес-но не уничтожиться, а нормально запустится и отработает
     
  5. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    leo
    Вот я и спрашиваю - может кто знает какие есть открытые интерфейсы?
    А может дело и не в интерфейсах.
    А подход - не выгрузилось, так и пёс с ним, завершу ExitProcess - мне не понятен.

    И на счёт жалоб:
    Звонил я разочек в сервис майкрософт (глюк при отображении EMF в офисе), и был приятно удивлён ответом.
    После того как распросили про серийник винды сказали что они на такие вопросы не отвечают и посоветовали обратиться в фирму, где за большие бабки мне ответят.
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Может это надо?
     
  7. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    Booster
    Конечно я использую CoTaskMemFree. Но он освобождает только IDList.
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Если при повторном вызове появляются ещё потоки - значит утечки. Если нет - значит кеширование.
     
  9. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Ещё бы Билли позвонил. ^)
     
  10. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    Booster
    Утечек нет (я по крайней мере не нашел).
    А на счёт Билли - отличная мысль, обязательно позвоню :)
     
  11. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    MirrorBlack
    Вообще-то win имеет право создавать в твоем процессе дополнительные потоки, тогда когда ей вздумается :))
    msdn
    Так что даже их уничтожение через перечисление потоков процесса (CreateToolhelp32Snapshot) не даст 100% гарантию что винда не успеет "встрять" в промежуток времени между снимком и уничтожением обнаруженных потоков и добавить их ещё, так что борьба с этой гидрой задача неблагодарная, не забудь обсудить это с Билли во время телефонного рандеву :))