Операционные системы. Программирование в операционной среде Windows
23 PVOID pvParam, // параметр для передачи в функцию потока DWORD fdwCreate, // флаги создания потока PDWORD pdwThreadID) ; // адрес для идентификатора потока Параметр psa является указателем на структуру SECURITY ATTRIBUTES. Если задано значение NULL, то атрибуты защиты заданы по умолчанию. Чтобы дочерние процессы смогли наследовать описатель этого объекта, необходимо определить структуру SECURITY ATTRIBUTES и инициализировать ее элемент hlnheritHandle = TRUE. Параметр cbStack определяет, какую часть адресного пространства поток сможет использовать под свой стек. Обычно задается значение О, тогда функция CreateThread создает стек для нового потока, используя информацию, встроенную компоновщиком в ЕХЕ-файл. Параметр pfnStartAddr определяет адрес функции потока, с которой должен будет начать работу создаваемый поток. Параметр pvParam позволяет передавать функции потока какое-либо инициализирующее значение. Оно может быть или числовым значением, или указателем на строку, или указателем на структуру данных с дополнительной информацией. Параметр определяет флаги, управляющие созданием потока Он принимает одно из двух значений: О или CREATES US FENDED. В первом случае исполнение потока начинается немедленно. В последнем случае система создает поток, инициализирует его, но приостанавливает до последующих указаний. Параметр pdwThreadID — это адрес переменной типа DWORD, в которой функция возвращает идентификатор, присвоенный системой новому потоку. Функция CreateThread возвращает описатель созданного потока. При разработке программных продуктов в Visual С ++ вместо явного вызова функции CreateThread следует производить вызов библиотечной функции _beginthreadex. Прототип функции _beginthreadex'. unsigned long _beginthreadex( void ^security, unsigned stack_size, unsigned (*start_address) (void *), void *arglist, unsigned initflag, unsigned *thrdaddr); У функции _beginthreadex тот же список параметров, что и у CreateThread, но их имена и типы несколько отличаются. Из-за некоторого расхождения в типах данных необходимо позаботиться об их приведении к тем, которые нужны функции beginthreadex, для этого можно использовать макрос cffiEGINTHREADEX:
Made with FlippingBook
RkJQdWJsaXNoZXIy MTY0OTYy