Основы программирования в Win32API. Марапулец Ю.В. - 35 стр.

UptoLike

Составители: 

с критическими разделами, отличается от терминологии, разработанной для
функций управления семафорами, исключающими семафорами и событиями,
однако сами функции выполняют одни и те же операции. В частности, принято
говорить не о создании критического раздела, а о его инициализации. Процесс
не ожидает критический раздел, а входит в него, и не освобождает критиче-
ский раздел, а покидает его. К тому же вы не закрываете дескриптор, а удаляе-
те объект:
VOID InitializeCriticalSection (LPCRITICAL_SECTION lpcs);
VOID EnterCriticalSection(LPCRITICAL_SECTION lpcs);
VOID LeaveCriticalSection(LPCRITICAL_SECTION lpcs);
VOID DeleteCriticalSection(LPCRlTICAL_SECTION lpcs);…
Переменная типа LPCRITICAL_SECTION содержит указатель (а не деск-
риптор) критического раздела. Функция InitializeCriticalSection должна полу-
чить указатель на пустой объект (&cs), который можно создать следующим
образом:
CRITICAL SECTION cs;…
2.5. Создание потоков с помощью функций библиотеки MFC
Способ создания потоков с помощью функций библиотеки MFC заключа-
ется в создании класса, порожденного от класса CWinThread. Схема этого
процесса выглядит следующим образом [2]:
// Класс CThreadExample
IMPLEMENT_DYNCREATE(CThreadExample, CWinThread)
CThreadExample::CThreadExample()
{
… // инициализация переменных-членов класса
}
CThreadExample::~CThreadExample()
{
}
BOOL CThreadExample::InitInstance()
{
// TODO: здесь следует выполнить инициализацию потока
//здесь должны выполняться операции инициализации,
//не связанные с переменными, например создание
// экземпляров других объектов класса
return TRUE;
}
int CThreadExample::ExitInstance()
{
35
с критическими разделами, отличается от терминологии, разработанной для
функций управления семафорами, исключающими семафорами и событиями,
однако сами функции выполняют одни и те же операции. В частности, принято
говорить не о создании критического раздела, а о его инициализации. Процесс
не ожидает критический раздел, а входит в него, и не освобождает критиче-
ский раздел, а покидает его. К тому же вы не закрываете дескриптор, а удаляе-
те объект:
    VOID InitializeCriticalSection (LPCRITICAL_SECTION lpcs);
    VOID EnterCriticalSection(LPCRITICAL_SECTION lpcs);
    VOID LeaveCriticalSection(LPCRITICAL_SECTION lpcs);
    VOID DeleteCriticalSection(LPCRlTICAL_SECTION lpcs);…
    Переменная типа LPCRITICAL_SECTION содержит указатель (а не деск-
риптор) критического раздела. Функция InitializeCriticalSection должна полу-
чить указатель на пустой объект (&cs), который можно создать следующим
образом:
CRITICAL SECTION cs;…


       2.5. Создание потоков с помощью функций библиотеки MFC

     Способ создания потоков с помощью функций библиотеки MFC заключа-
ется в создании класса, порожденного от класса CWinThread. Схема этого
процесса выглядит следующим образом [2]:
// Класс CThreadExample
IMPLEMENT_DYNCREATE(CThreadExample, CWinThread)
CThreadExample::CThreadExample()
{
     … // инициализация переменных-членов класса
}
CThreadExample::~CThreadExample()
{
}
BOOL CThreadExample::InitInstance()
{
     // TODO: здесь следует выполнить инициализацию потока
     //здесь должны выполняться операции инициализации,
     //не связанные с переменными, например создание
     // экземпляров других объектов класса
     return TRUE;
}
int CThreadExample::ExitInstance()
{
                                     35