Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
0626114503_03 - Конспект лекций.doc
Скачиваний:
10
Добавлен:
21.04.2019
Размер:
554.5 Кб
Скачать

Лекция №10

VOID ExitThread(DWORD ExitCode)

Завершение потока.

BOOL TerminateThread(HANDLE h,

DWORD ExitCode)

DWORD [Suspend/Resume] Thread(HANDLE h)

Suspend – приостановить работу потока

Resume – возобновить работу потока

Действие функции Suspend является накапливаемым (если два раза запустить функцию SuspendThread одному и тому же потоку, то необходимо вызвать дважды ResumeThread)

BOOL SwitchToThread()

Вызвать планировщик системы.

DWORD SetThreadAffinitiMask(HANDLE h,

DWORD NetMask)

Уст. множество процессоров, на которых поток может работать.

Результат – предыдущая маска, в которой все работало

DWORD SetThreadIdealProcessor(HANDLE h,

DWORD NProc)

Устанавливаем для потока предпочитаемый процессор. Если все равно какой процессор, то вместо NProc ставим константу MAXIMUM_PROCESSOR.

Волокна

(потоки, которыми мы сами управляем)

LPVOID CreateFiber(

SIZE_T StackSize,

LPFIBER_START_ROUTINE Func,

LPVOID Params) – создаем волокно.

VOID DeleteFiber(LPVOID f) – удаление волокны

LPVOID ConvertThreadToFiber (LPVOID Params) – прежде чем начать работу один поток превратить в волокно.

BOOL ConvertFiberToThread() – уничтожаем структуру волокна и превращаем его в поток

VOID SwitchToFiber(LPVOID f) – переключиться на указанное волокно

Лекция №11 Синхронизация процессов.

DWORD WiteForSingleObject(HANDLE h,

DWORD Timeout)

Ждет указанное время некоторый объект.

Если мы хотим ждать «до потери пульса», то вместо указания времени пишем INFINITE. Ждать для процессов и потоков – это значит дождаться их окончания.

Результат: WAIT_TIMEOUT – не дождались (истекло время)

WAIT_OBJECT – дождались

WAIT_ABANDONED – только для MUTEX, означает, что поток завершился, но MUTEX не освободился.

DWORD WaitForMultipleObject(DWORD nCount,

HANDLE *h,

BOOL WaitAll,

DWORD TimeOut)

первый параметр – это количество элементов массива, далее идет указатель на первый элемент массива, следующий параметр – ждем одного из или всех вместе. И последний параметр – время ожидания.

Результат: WAIT_TIMEOUT – не дождались (если третий параметр false – значит никого не дождались, если true – не дождались сразу всех)

WAIT_OBJECT – дождались.

MUTEX выполняет в системе роль критической секции.

Захватить MUTEX – войти в критическую секцию.

Освободить MUTEX – выйти из критической секции.

MUTEX может принадлежать одному потоку, который будет считать, что он находится в критической секции.

HANDLE CreateMutex(LPSECURITY ATTRIBUTES ProcAttr,

BOOL InitOwuer,

LPCTSTR Sysname)

Создает объект

  1. параметры безопасности,

  2. Будем ли мы при создании mutex захватывать его или нет.

  3. Системное имя mutex

BOOL ReleaseMutex(HANDLE h) – освободить mutex

Если нам объект больше не нужен, то вызываем функцию

BOOL CloseHandle(HANDLE h)