Организация мультизадачности для приложений WIN32
DWORD dwCreationFlags, // флаги создания потока
LPDWORD lpThreadId //адрес переменной для возвращаемого идентификатора потока );
Функция возвращает идентификатор вновь созданного объекта ядра поток типа HANDLE или NULL при ошибке. Кроме того, через последний параметр функции возвращается идентификатор самого потока. Атрибуты безопасности имеют тот же смысл, что и для функции CreateProcess. В качестве начального размера стека можно указать нуль, тогда используется размер стека родительского потока. В качестве флагов создания потока можно указывать либо нуль, тогда выполнение потока начнется немедленно после создания, либо константу CREATE_SUSPENDED. В последнем случае поток будет создан, но его выполнение будет отложено. Возобновить выполнение потока можно при помощи функции ResumeThread. Приостановить выполнение потока можно и в ходе его выполнения при помощи функции SuspendThread.
Перед созданием потока в приложении должна быть определена функция потока, имеющая следующий прототип (название функции может быть любым):
DWORD ThreadFunc(LPVOID lpParameter);
Функция потока получает управление после создания потока, адрес этой функции является параметром функции CreateThread. Параметром функции потока является произвольное 32-разрядное значение, передаваемое при создании потока через соответствующий параметр функции CreateThread. Обычно этот параметр является указателем на некоторый объект и должен быть приведен к типу LPVOID. При нормальном завершении функция потока должна вернуть нулевое значение. На выполняемые функцией потока операции не накладывается никаких ограничений, однако, если функция потока создает окно и намеревается обрабатывать сообщения для этого окна, то она должна иметь собственный цикл обработки сообщений. Более часто, параллельные потоки создаются для выполнения длительных вычислительных операций. Функции таких потоков обычно не имеют цикла обработки сообщений.
предыдущаяследующая