Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Создание потока

5.8K
25 марта 2004 года
Digi
15 / / 25.03.2004
Господа, подскажите,что не так. ВCB 6 создаю поток. Когда он отрабатыват и закрываю форму все нормально. Когда же во время работы потока закрываю фрму выскакивает сообщение, "Отказано в доступе" или "Неверный дискриптор окна"
Код примерно такой:

Код:
HANDLE hThread;
DWORD dwThreadID;
DWORD dwExitCode;

DWORD __stdcall Thread(LPVOID)
{
    MainForm->OnBeforDevide->Execute();
    MainForm->StartToDevide->Execute();
        MainForm->OnAfterDevide->Execute();  
    return 0;
};
...
...

void __fastcall TMainForm::StartThreadExecute(TObject *Sender)
{
      hThread = CreateThread(NULL, 0, Thread, Application->MainForm->Handle, 0, &dwThreadID);
}
...
...

void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
{
     GetExitCodeThread(hThread, &dwExitCode);
     TerminateThread(hThread, dwExitCode);
}
310
27 марта 2004 года
fellow
853 / / 17.03.2003
Сперва по логике следует поток прекратить, потом брать его код завершения (это по поводу очерёдности вызова TerminateThread GetExitCodeThread)

Кроме того, TerminateThread, как указано в MSDN - [COLOR=orangered]опасная функция[/COLOR]. Для завершения потока лучше использовать другой способ - событие или флаг. MSDN - бесценный кладезь информации.
5.8K
27 марта 2004 года
Digi
15 / / 25.03.2004
Цитата:
Originally posted by fellow
MSDN - бесценный кладезь информации.


Спасибо. MSDN то есть, но там почему-то не посмотрел. Смотроел в книге. Теперь еще и MSDN почитаю.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог