Конференция "WinAPI" » MAPI: висяк при обрыве соединения [D7, WinXP]
 
  • AlexKung (18.07.08 14:42) [20]
    В общем, через потоки сделал, чтение контактов можно прервать.

    Но при вызове MsgStore.OpenEntry, где MsgStore - это либо Public Folders, либо ящик пользователя на сервере Exchange при отсутствии подключения к серверу, получается такая ситуация:

    - Сначала происходит долгий висяк (~5-10мин.)
    - Затем возвращается ошибка MAPI_E_FAILONEPROVIDER

    Если подключение к серверу есть, то все нормально.

    Так вот такой вопрос: почему так надолго зависает и как этого избежать?
  • AlexKung (18.07.08 14:44) [21]
    И самое интересное: если это все запхать в поток и по таймауту попробовать убить поток, то прогамма виснет :(
  • SergeyIT © (18.07.08 22:20) [22]
    Мы использовали нитки без окон, а в Дельфи к ниткам окно привязано - может поэтому виснет.
    (Использовали АПИшную ::TerminateThread(hThread, 0);)
  • AlexKung (19.07.08 12:11) [23]
    Спасибо, буду пробовать ;)
  • AlexKung (21.07.08 18:55) [24]
    Короче, не подходит мне такой способ, даже Personal Folders не читаются, а TerminateThread вообще не рекомендуется использовать.

    Я так понимаю, при запросе MsgStore происходит попытка подключения к серверу, а как можно ли заставить в пределах сессии не пытаться получать доступ к серверу, если по опр. таймауту не подключились?
  • SergeyIT © (21.07.08 19:24) [25]
    Не рекомендуется TerminateThread - а что делать?
    (С этим кодом продукт уже 10 лет на рынке и ничего)
    А если подключились и происходит обрыв - тогда висяк (и только TerminateThread)!
    В реальной жизни, думаю, не так часто происходят такие события, если все правильно организовано.
  • AlexKung (23.07.08 22:14) [26]

    > Не рекомендуется TerminateThread - а что делать?

    Да, согласен, нарвеное ничего больше нельзя сделать :(
    Просто меня волнует, что утечка памяти будет при таком подходе :(

    Самое интересное, что у Microsoft это нигде не документировано (по крайней мере я не нашел) и даже Outlook 2003 виснет на 2-3 мин если пропробовать развернуть узел All Public Folders ;)
  • SergeyIT © (24.07.08 09:47) [27]

    > утечка памяти будет

    Если не много памяти использовать в нитке (и нитка на чистом API), то утечка небольшая. Это просто протестировать надо.
 
Конференция "WinAPI" » MAPI: висяк при обрыве соединения [D7, WinXP]
Есть новые Нет новых   [134435   +33][b:0][p:0]