Организация мультизадачности для приложений WIN32
Любой поток имеет возможность запустить дочерний (по отношению к процессу, владеющему данным потоком) процесс, вызвав функцию CreateProcess. При этом можно сразу оборвать связь между дочерним и родительским процессами, вызвав функцию CloseHandle для идентификаторов объектов ядра поток и процесс, возвращаемых в структуре PROCCESS_INFORMATION, или отложить эту операцию для обеспечения взаимодействия между дочерним и родительским процессом. В любом случае, названную операцию необходимо выполнить до завершения родительского процесса, так как в противном случае система не сможет удалить объекты ядра процесс и поток для родительского процесса (их счетчики не будут равны нулю).
Процесс завершается, когда один из его потоков вызывает функцию ExitProcess. Эта функция также автоматически вызывается кодом завершения функции WinMain. При завершении процесса прекращается выполнение всех его потоков, освобождаются ресурсы, выделенные процессу, объект ядра процесс переводится в состояние signaled, уменьшается на единицу счетчик числа его пользователей, и если счетчик равен нулю объект ядра процесс освобождается. Завершение родительского процесса не приводит к завершению порожденных им дочерних процессов. В API WIN32 имеется также функция TerminateProcess, которая позволяет завершить любой процесс, идентификатор которого передается ей в качестве параметра.
Для создания в рамках процесса нового параллельного потока используется функция CreateThread:
72
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // указатель на атрибуты безопасности
DWORD dwStackSize, //начальный размер стека потока в байтах
LPTHREAD_START_ROUTINE lpStartAddress, //адрес функции потока
LPVOID lpParameter, // параметр функции потока
предыдущаяследующая