Смекни!
smekni.com

Процессы, нити и волокна в ОС Windows (стр. 2 из 2)

8. Wait-функции

Для приостановки выполнения работы нити можно использовать различные способы.

Функция Sleep() приостанавливает работу нити на заданное число миллисекунд. Если в качестве аргумента вы укажите 0 ms, то произойдет следующее. Нить откажется от своего кванта процессорного времени, однако тут же появится в списке нитей, готовых к выполнению. Иными словами произойдет намеренное переключение нитей (вернее сказать, попытка переключения – ведь следующей для выполнения нитью вполне может стать та же самая).

Пример. Программа создает процесс «Калькулятор» и через 15 секунд его уничтожает.

#include <windows.h>

int main (int argc, char* argv[])

{

STARTUPINFO StartUpInfo;

PROCESS_INFORMATION ProcessInfo;

memset (&StartUpInfo, 0, sizeof(STARTUPINFO));

StartUpInfo.cb=sizeof(STARTUPINFO);

If (CreateProcess (NULL, «c:&bsol;windows&bsol;calc.exe», NULL, NULL, FALSE,

NORMAL_PRIORITY_CLASS, NULL, NULL,&StartUpInfo,&ProcessInfo))

{

Sleep(15000);

TerminateProcess (ProcessInfo.hProcess, 0);

}

ExitProcess(0);

}

Функция WaitForSingleObject() приостанавливает выполнение нити до тех пор, пока не произойдет одно из двух событий:

– истечет таймаут ожидания;

– ожидаемый объект перейдет в сигнальное (signaled) состояние.

По возвращаемому значению можно понять, какое из двух событий произошло. Ожидать с помощью wait‑функций можно большинство объектов ядра, например, объект «процесс» или «нить», чтобы определить, когда они завершат свою работу.

Функции WaitForMultipleObjects передается сразу массив объектов. Можно ожидать срабатывания сразу всех объектов или какого-то одного из них.

Пример. Программа создает две одинаковых нити и ожидает их завершения. Нити просто выводят текстовое сообщение, которое передано им при инициализации.

#include <windows.h>

#include <process.h>

unsigned ThreadFunc (void * arg)

{

char ** str = (char**) arg;

MessageBox (0, str[0], str[1], 0);

ExitThread(0);

return 0;

}

int main (int argc, char* argv[])

{

char * InitStr1 [2] = {«First thread running!», «11111»}; // строка для первой нити

char * InitStr2 [2] = {«Second thread running!», «22222»}; // строка для второй нити

unsigned long uThreadIDs[2];

HANDLE hThreads[2];

hThreads[0] = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE) ThreadFunc,

InitStr1, 0,&uThreadIDs[0]);

hThreads[1] = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE) ThreadFunc,

InitStr2, 0,&uThreadIDs[1]);

// Ждем, пока нити не завершат свою работу

WaitForMultipleObjects (2, hThreads, TRUE, INFINITE);

// Закрываем дескрипторы

CloseHandle (hThreads[0]);

CloseHandle (hThreads[1]);

return 0;

}

Выводы

В реферате рассмотрены различные WIN API функции и последовательность действий для создания и работы с процесами, нитями и фолокнами при созданиии вминдоуз-приложений, их применение и особенности. Для получения полной информации о назначении, использовании и синтаксисе всех функций WIN32 API необходимо воспользоваться системой помощи MSSDK, входящей в состав сред программирования BorlandDelphi или CBuilder, а также MSDN, поставляемым в составе системы программирования VisualC.

Список литературы

1. Бэрри Нанс. Компьютерные сети пер. с англ. – М.: БИНОМ, 1996.

2. Глоссарий сетевых терминов http://www.bilim.com/koi8/library/glossary/

3. Компьютерные сети: Учебный курс Microsoft Corporation – М.: Издательский отдел «Русская редакция», 1999.

4. Основы современных компьютерных технологий под редакцией А.Д. Хомоненко – СПб КОРОНА принт, 1998.

5. Ресурсы Microsoft Windows NT Workstation 4.0 пер. сангл. яз. BNV – СПб, 1998.

6. Сетевые операционные системы Н.А. Олифер, В.Г. Олифер, 2001, СПб, Питер, 544 стр.

7. Синхронизация нитей внутри процесса в ОС Windows, http://subscribe.ru/ archive/comp.soft.win.swodniwgniqaf/200305/23131921.text

8. Современные операционные системы, Э. Таненбаум, 2002, СПб, Питер, 1040 стр.

9. Справочник Novell Netware 4 С.Б. Орлов, по заказу ИИЦ «Попурри», 1994.

10. Титтел Эд, Хадсон Курт, Дж. МайклСтюард Networking Essentials – СПбПИТЕР, 1999.

11. Титтел Эд, Хадсон Курт, Дж. Майкл Стюард TCP/IP – СПб ПИТЕР, 1999.

12. Якубайтис Э.А. Информационные сети и системы: Справочная книга. – М.: Финансы и статистика, 1996.