Составители:
Рубрика:
с критическими разделами, отличается от терминологии, разработанной для
функций управления семафорами, исключающими семафорами и событиями,
однако сами функции выполняют одни и те же операции. В частности, принято
говорить не о создании критического раздела, а о его инициализации. Процесс
не ожидает критический раздел, а входит в него, и не освобождает критиче-
ский раздел, а покидает его. К тому же вы не закрываете дескриптор, а удаляе-
те объект:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 33
- 34
- 35
- 36
- 37
- …
- следующая ›
- последняя »
