Существует проблема с моей программой в том, как она обрабатывает opendir
или readdir
в сетевом расположении с высокой задержкой.
В общем, проблем не было, поскольку сеть функционировала нормально. Но в одном случае сеть показала большую задержку, и в результате программа зависла.
Я также проверил доступ к сети, пытаясь открыть папку вручную, и это заморозило Windows Explorer. Иногда мне удавалось получить доступ к папке верхнего уровня в сети, но затем она снова зависала, пытаясь получить доступ к следующему уровню.
Среда
- Windows 7
- Программа скомпилирована с использованием g cc с помощью mingw
Это часть кода, которая сначала пытается получить доступ к сетевой папке:
Соответствующий код
DIR * dptr;
struct dirent * directory;
FILE * net_acr_loc, * net_acr;
char net_loc[ MAX_PATH ], c = 0;
if( NULL != ( dptr = opendir( net_loc ) ) ) //first check whether the lock file exists
{
while( NULL != ( directory = readdir( dptr ) ) )
{
if( strstr( directory -> d_name, ".lckacr" ) )
{
closedir( dptr );
return NULL; //it exists, return early
}
}
closedir( dptr );
}
Я думал, что он зависал при вызове opendir
, потому что он, возможно, еще ничего не был возвращен.
Значение net_lo c получено ранее, и этот раздел не отображается.
Можно ли добавить какой-нибудь таймер?
Согласно Linux странице справочника , поток каталога возвращается или NULL
, если был ошибка.