Visual C++. Описание стандартных классов - CWinThread

ОГЛАВЛЕНИЕ


CWinThread

Объекты класса CWinThread представляют собой потоки, исполняющиеся в приложении. Основной поток приложения обычно представлен объектом класса, производного от класса CWinApp, который, в свою очередь, является производным от класса CWinThread. Дополнительные объекты класса CWinThread позволяют создавать несколько потоков в одном приложении. Существуют две основные разновидности потоков: рабочие потоки и интерфейсные потоки. Рабочие потоки не содержат цикла обработки сообщений. Примером такого потока может служить выполнение фоновых вычислений в приложении, использующем рабочие листы. Интерфейсные потоки содержат цикл обработки сообщений и могут обрабатывать сообщения, поступающие от системы. Класс CWinApp и производные от него классы являются примером интерфейсных потоков. Другие классы интерфейсных потоков могут производиться непосредственно от класса CWinThread. Объекты класса CWinThread обычно уничтожаются при завершении потоком своей работы. Для того чтобы эти объекты сохранялись после завершения потоком своей работы необходимо присвоить переменной m_bAutoDelete значения FALSE. Вся информация, необходимая для взаимодействия потока с приложением содержится в соответствующем объекте класса CWinThread. Поэтому любой поток, использующий библиотеку MFC должен быть производным от данного класса. Например, поток, созданный функцией _beginthreadex, не может использоваться в приложениях, использующих библиотеку MFC. Поток создается функцией AfxBeginThread. Эта функция имеет две версии, первая из которых создает рабочий поток, а вторая - интерфейсный поток. При создании рабочего потока первым аргументом функции AfxBeginThread является указатель на исполняющую функцию данного потока. При создании интерфейсного потока первым аргументом функции AfxBeginThread является указатель на объект структуры CRuntimeClass пользовательского класса, производного от класса CWinThread. В обеих версиях функций могут быть указаны дополнительные аргументы, определяющие приоритет потока, размер его стека и атрибуты безопасности. Функция AfxBeginThread возвращает указатель на созданный ею объект класса, производного от класса CWinThread. Вместо вызова функции AfxBeginThread объект класса, производного от класса CWinThread, может быть создан своим конструктором, после чего для него должна быть вызвана функция CreateThread. Этот двухэтапный метод может использоваться для последовательного создания нескольких потоков с использованием одного объекта класса CWinThread. Описание данного класса содержится в файле заголовка afxwin.h.