C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как лечить External exception C0000008?  (Прочитано 4122 раз)
Makin_tosh
Участник


Сказали спасибо: +4/-0
Offline

Сообщений: 156


Как лечить External exception C0000008?
« : 18 Сентябрь 2013, 17:10:51 »

Здравствуйте! Подскажите, пожалуйста как решить следующую проблему.
У меня есть поток, который просматривает каталог на изменения файлов:
cpp
Код
__fastcall TMonitorDirL::TMonitorDirL(bool CreateSuspended, String MPath)
: TThread(CreateSuspended)
{
MPath_Thread = MPath;
}
//---------------------------------------------------------------------------
HANDLE dwChangeHandlesL[2];
//---------------------------------------------------------------------------
/*FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME |
FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_SIZE |
FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_SECURITY*/

void __fastcall TMonitorDirL::Terminate()
{
//TThread::Terminate();
SetEvent(dwChangeHandlesL[1]);
}
//---------------------------------------------------------------------------
void __fastcall TMonitorDirL::Execute()
{
DWORD dwWaitStatus;
int flags = FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME |
FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_SIZE;
dwChangeHandlesL[0] = FindFirstChangeNotification(MPath_Thread.t_str(), false, flags);
if (dwChangeHandlesL[0] == INVALID_HANDLE_VALUE) ExitProcess(GetLastError());
dwChangeHandlesL[1] = CreateEvent(NULL, true, false, NULL);
if (dwChangeHandlesL[1] == INVALID_HANDLE_VALUE) ExitProcess(GetLastError());
if ((dwChangeHandlesL[0] == NULL) || (dwChangeHandlesL[1] == NULL)) ExitProcess(GetLastError());
try {
while (true) {
dwWaitStatus = WaitForMultipleObjects(2, (HANDLE *)&dwChangeHandlesL, false, INFINITE);
if (dwWaitStatus == WAIT_OBJECT_0) {
SendMessage(Glav_Form->Handle, WM_HANDLE_THREAD_2, GetCurrentThreadId(), 2);
FindNextChangeNotification(dwChangeHandlesL[0]);
}
else if (dwWaitStatus == WAIT_OBJECT_0 + 1) {
break;
}
else if (dwWaitStatus == WAIT_FAILED) {
Terminate();
}
}
}
__finally {
FindCloseChangeNotification(dwChangeHandlesL[0]);
CloseHandle(dwChangeHandlesL[1]);
}
}
//---------------------------------------------------------------------------
 
h
Код
class TMonitorDirL : public TThread
{
private:
String MPath_Thread;
protected:
bool __fastcall TMonitorDirL::MD (String Src);
void __fastcall Execute();
public:
void __fastcall Terminate();
__fastcall TMonitorDirL(bool CreateSuspended, String MPath);
};
 
Запуск потока работает так:
Вызывается каждый раз, при считывании каталога
Код
void __fastcall TGlav_Form::OpenLeftMonitorDirFile()
{
if (MonitorDirL_ThreadPro != NULL) {
MonitorDirL_ThreadPro->Terminate();
MonitorDirL_ThreadPro = NULL;
}
String MonitorPath = LCatalogEdit->Text;
String temp_str = MonitorPath;
int length = temp_str.Length();
if (length > 250)
temp_str = String("\\\\?\\") + temp_str;
char buffer[MAX_PATH - 1];
int length_short = GetShortPathName(temp_str.t_str(), buffer,
sizeof(buffer));
String ResultStr;
if (length_short != 0)
ResultStr = (String)buffer;
else
ResultStr = temp_str;
String ProblemMonitorDirL = "";
MonitorDirL_ThreadPro = new TMonitorDirL(true, ResultStr);
MonitorDirL_ThreadPro->FreeOnTerminate = true;
MonitorDirL_ThreadPro->Priority = tpNormal;
MonitorDirL_ThreadPro->Resume();
}
// ---------------------------------------------------------------------------
 
Так вот на строчках:
Код
__finally {
FindCloseChangeNotification(dwChangeHandlesL[0]);
CloseHandle(dwChangeHandlesL[1]);
 
возникает ошибка, если в заданной папке, что-то меняется.
Заранее спасибо.
« Последнее редактирование: 18 Сентябрь 2013, 18:35:23 от volvo877 » Записан
POV
Участник


Сказали спасибо: +107/-7
Offline

Сообщений: 640


Re: Как лечить External exception C0000008?
« Ответ #1 : 19 Сентябрь 2013, 08:27:01 »

Цитата: Makin_tosh от 18 Сентябрь 2013, 17:10:51
возникает ошибка, если в заданной папке, что-то меняется.
Заранее спасибо.

Приходит бабка в поликлинику "Сынок, совсем плохо, спину ломит, распрямиться не могу.."
- А что, бабка, если нагнуться, то не так больно?
- Ага.
- Ну ты так и ходи.

)))))
Записан
Makin_tosh
Участник


Сказали спасибо: +4/-0
Offline

Сообщений: 156


« Ответ #2 : 21 Сентябрь 2013, 07:11:37 »

Очень интересный случай из жизни бабки. Я ведь только спрашиваю, почему возникает такая ошибка.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.081 секунд. Запросов: 21.