|
Навигация
|
Главная » Windows C++ потоки в WIN32Источник: coders-library admin Потоки всегда создаются в контексте какого-либо процесса, и вся их жизнь проходит только в его границах. На практике это означает, что потоки исполняют код и манипулируют данными в адресном пространстве процесса. Если два или более потока выполняются внутри одного процесса, они делят одно адресное пространство.Любой поток (thread) состоит из двух компонентов: Создание потока. Первичный поток, который присутствует в программе, начинает свое выполнение с главной функции потока типа WinMain. Для создания вторичного потока необходимо создать и для него входную функцию, которая выглядит примерно так: Имя у функции вторичного потока, в отличии от первичного, может быть любым однако, при наличии нескольких разных потоков, назвать функции необходимо по-разному, иначе система создаст разные реализации одной и той же функции. Когда поток закончит свое исполнение, он вернет управление системе, память, отведенная под его стек, будет освобождена, а счетчик пользователей его объекта ядра "поток" уменьшится на 1. Когда счетчик обнулится, этот объект ядра будет разрушен. Для создания своего потока необходимо использовать функцию CreateThread: При каждом вызове этой функции система создает объект ядра (поток). Это не сам поток, а компактная структура данных, которая используется операционной системой для управления потоком и хранит статистическую информацию о потоке. Система выделяет память под стек потока из адресного пространства процесса. Новый поток выполняется в контексте того же процесса, что и родительский поток. Поэтому он получает доступ ко всем описателям объектов ядра, всей памяти и стекам всех потоков в процессе. За счет этого потоки в рамках одного процесса могут легко взаимодействовать друг с другом. CreateThread - это Windows-функция, создающая поток. Если вы пишете код на С/С++ не вызывайте ее. Вместо нее Вы должны использовать _beginthreadex из библиотеки Visual C++. Почему это так важно в наших следующих выпусках. Параметры функции CreateThread. LpThreadAttributes - является указателем на структуру LPSECURITY_ATTRIBUTES. Для присвоения атрибутов защиты по умолчанию, передавайте в этом параметре NULL. DwStackSize - параметр определяет размер стека, выделяемый для потока из общего адресного пространства процесса. При передаче 0 - размер устанавливается в значение по умолчанию. LpStartAddress - указатель на адрес входной функции потока. LpParameter - параметр, который будет передан внутрь функции потока. DwCreationFlags - принимает одно из двух значений: 0 - исполнение начинается немедленно, или CREATE_SUSPENDED - исполнение приостанавливается до последующих указаний. LpThreadId - Адрес переменной типа DWORD в который функция возвращает идентификатор, приписанный системой новому потоку. Завершение потока Поток можно завершит четырьмя способами: Опросы: люди неохотно переходят на Windows 8 потому, что боятся. Microsoft SQL Server 2012: управляй любыми данными, где бы они ни находились. BitDefender: Windows Defender способен блокировать 85% известных угроз. Транспортируемые табличные пространства в Oracle 11g. Dr.Web для Windows - новинки версии 8. Главная » Windows |
© 2024 Team.Furia.Ru.
Частичное копирование материалов разрешено. |