Составители:
Хотя функция CloseHandle не влияет на псевдодескрипторы, дескриптор, созданный с
помощью функции DuplicateHandle, является настоящим и в конце концов должен быть
закрыт. Применение псевдодескрипторов значительно ускоряет работу функции
GetCurrentThread, поскольку в этом случае подразумевается, что поток имеет полный
доступ сам к себе, и функция возвращает результат, не заботясь о мерах безопасности.
По аналогии с тем, как Windows-программа завершается по достижении конца
функции WinMain, поток обычно прекращает свое существование при достижении кон-
ца функции, в которой был начат. Когда он достигает конца стартовой функции, система
автоматически вызывает команду ExitThread, имеющую такой синтаксис:
VOID ExitThread( DWORD dwExitCode );
Хотя операционная система вызывает функцию ExitThread автоматически, при не-
обходимости досрочного завершения потока вы можете вызвать эту функцию явным об-
разом:
DWORD ThreadFunction( LPDWORD lpdwParam )
{
HANDLE hThread = CreateThread( <параметры>);
// далее следуют стандартные операции инициализации;
// проверка наличия ошибочных условий
if ( <условие возникновения ошибки> )
{
ExitThread( ERROR_CODE ); // прекратить работу потока
}
// ошибки нет, работа продолжается
return( SUCCESS_CODE ); // эта строка программы
// заставляет систему вызвать функцию ExitThread
}
Параметры ERROR_CODE и SUCCESS_CODE определяются по вашему усмотре-
нию. В нашем простом примере поток нетрудно прервать с помощью команды return:
if( <условие возникновения ошибки> )
{
return( ERROR_CODE ); // прекратить работу потока
}
В данном случае, команда return приводит к тому же результату, что и функция Ex-
itThread, так как при ее выполнении осуществляется неявный вызов последней. Эта
функция особенно полезна при необходимости прервать поток из любой под програм-
мы, вызываемой внутри функции типа ThreadFunction.
Когда поток завершается с помощью оператора return, 32-разрядный код заверше-
ния автоматически передается функции ExitThread. После прекращения работы потока
код его завершения может быть получен с помощью функции, приведенной ниже:
// один поток вызывает эту функцию для получения кода завершения другого потока
BOOL GetExitCodeThread( HANDLE hThread, LPDWORD lpdwExitCode );
Функция GetExitCodeThread возвращает значение FALSE в том случае, если опре-
делить код завершения помешала ошибка.
69
Хотя функция CloseHandle не влияет на псевдодескрипторы, дескриптор, созданный с
помощью функции DuplicateHandle, является настоящим и в конце концов должен быть
закрыт. Применение псевдодескрипторов значительно ускоряет работу функции
GetCurrentThread, поскольку в этом случае подразумевается, что поток имеет полный
доступ сам к себе, и функция возвращает результат, не заботясь о мерах безопасности.
По аналогии с тем, как Windows-программа завершается по достижении конца
функции WinMain, поток обычно прекращает свое существование при достижении кон-
ца функции, в которой был начат. Когда он достигает конца стартовой функции, система
автоматически вызывает команду ExitThread, имеющую такой синтаксис:
VOID ExitThread( DWORD dwExitCode );
Хотя операционная система вызывает функцию ExitThread автоматически, при не-
обходимости досрочного завершения потока вы можете вызвать эту функцию явным об-
разом:
DWORD ThreadFunction( LPDWORD lpdwParam )
{
HANDLE hThread = CreateThread( <параметры>);
// далее следуют стандартные операции инициализации;
// проверка наличия ошибочных условий
if ( <условие возникновения ошибки> )
{
ExitThread( ERROR_CODE ); // прекратить работу потока
}
// ошибки нет, работа продолжается
return( SUCCESS_CODE ); // эта строка программы
// заставляет систему вызвать функцию ExitThread
}
Параметры ERROR_CODE и SUCCESS_CODE определяются по вашему усмотре-
нию. В нашем простом примере поток нетрудно прервать с помощью команды return:
if( <условие возникновения ошибки> )
{
return( ERROR_CODE ); // прекратить работу потока
}
В данном случае, команда return приводит к тому же результату, что и функция Ex-
itThread, так как при ее выполнении осуществляется неявный вызов последней. Эта
функция особенно полезна при необходимости прервать поток из любой под програм-
мы, вызываемой внутри функции типа ThreadFunction.
Когда поток завершается с помощью оператора return, 32-разрядный код заверше-
ния автоматически передается функции ExitThread. После прекращения работы потока
код его завершения может быть получен с помощью функции, приведенной ниже:
// один поток вызывает эту функцию для получения кода завершения другого потока
BOOL GetExitCodeThread( HANDLE hThread, LPDWORD lpdwExitCode );
Функция GetExitCodeThread возвращает значение FALSE в том случае, если опре-
делить код завершения помешала ошибка.
69
Страницы
- « первая
- ‹ предыдущая
- …
- 65
- 66
- 67
- 68
- 69
- …
- следующая ›
- последняя »
