2009-07-07 2 views
1

Возможно ли, чтобы SetCurrentDirectory() перешел в режим ожидания, если наблюдается замедление работы сети, препятствующее доступу к каталогу в течение некоторого времени? (В порядке 15-30 секунд ...?)SetCurrentDirectory time out

Если это так, что время ожидания настраивается и где его можно установить?

ответ

1

Следующая программа, которая пытается удалить SetCurrentDirectory в несуществующий каталог с ошибкой 0x2, которая равна ERROR_FILE_NOT_FOUND. Так как SetCurrentDirectory выполняет некоторую проверку в каталоге, вы можете рассчитывать на таймаут при медленном сетевом соединении.

#include <windows.h> 
#include <stdio.h> 

int __cdecl main() 
{ 

    if (SetCurrentDirectory(L"C:\\Invalid") == 0) 
    { 
     printf("0x%x", GetLastError()); 
    } 

    return 0; 
} 
0

Вы можете попробовать установить текущий каталог в отдельном потоке, и ждать его, чтобы закончить только в течение разумного периода времени. Поскольку текущий параметр каталога для каждого процесса, вызов SetCurrentDirectory из другого потока все равно будет выполнять задание. Вы должны, конечно, учитывать, что должно произойти, если набор занял больше времени, чем вы хотели ждать, но после того, как основной поток, перемещенный по набору, действительно завершился.

Учитывая это, я стараюсь избегать использования текущего каталога по причинам, отличным от открытия диалогового окна выбора файлов. Будучи глобальным процессом, в многопоточной среде нельзя доверять. Использование полных путей лучше, когда это возможно.

+1

«... Я стараюсь избегать использования текущего каталога ...» Я полностью согласен с этим по многим причинам – SteelBytes