Windows

         

Ваша первая функция потока


Каждый поток начинает выполнение с некоей входной функции. В первичном пото ке таковой является main, wmain, WinMain или wWinMain. Если Вы хотите создать вто ричный поток, в нем тоже должна быть входная функция, которая выглядит пример но так

DWORD WINAPI ThreadFunc(PVOID pvPararn)
{
DWORD rtwResult = 0;

return(dwResult);
}

Функция потока может выполнять любые задачи. Рано или поздно она закончит свою работу и вернет управление. В этот момент Ваш поток остановится, память, от веденная под его стек, будет освобождена, а счетчик пользователей его объекта ядра "поток" уменьшится на 1. Когда счетчик обнулится, этот объект ядра будет разрушен Но, как и объект ядра "процесс", он может жить гораздо дольше, чем сопоставленный с ним поток.

А теперь поговорим о самых важных вещах, касающихся функций потоков

  • В отличие от входной функции первичного потока, у которой должно быть одно из четырех имен: main, wmain, WinMain или wWinMain, — функцию пото ка можно назвать как угодно. Однако, если в программе несколько функций потоков, Вы должны присвоить им разные имена, иначе компилятор или компоновщик решит, что Вы создаете несколько реализаций единственной функции.

  • Поскольку входным функциям первичного потока передаются строковые пара метры, они существуют в ANSI- и Unicode-версиях: main - wmain и WinMain —
  • wWinA4ain. Но функциям потоков передается единственный параметр, смысл которого определяется Вами, а не операционной системой Поэтому здесь нет проблем с ANSI/Unicode

  • Функция потока должна возвращать значение, которое будет использоваться как код завершения потока. Здесь полная аналогия с библиотекой С/С++: код завершения первичного потока становится кодом завершения процесса.

  • Функции потоков (да и все Ваши функции) должны по мере возможности об ходиться своими параметрами и локальными переменными. Так как к стати ческой или глобальной переменной могут одновременно обратиться несколь ко потоков, есть риск повредить ее содержимое. Однако параметры и локаль ные переменные создаются в стеке потока, поэтому они в гораздо меньшей степени подвержены влиянию другого потока.
  • Вот Вы и узнали, как должна быть реализована функция потока Теперь рассмот рим, как заставить операционную систему создать поток, который выполнит эту фун кцию.



    Содержание раздела