Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kursOS.doc
Скачиваний:
3
Добавлен:
20.11.2019
Размер:
162.82 Кб
Скачать
  1. Программа фонового копирования с размещением заданий в каталоге.

- существует отдельная папка, где располагаются задания

- задания представляют собой простой текстовый файл, состоящий из двух частей - откуда и куда, с возможностью задания маски

- программа отслеживает наличие какого-либо файла в папке. Как только он появляется, начинается выполнение задания

- по завершению задания, файл с заданием удаляется

- для каждого отдельного задания запускается отдельный поток

---------------------------------------------------------------

Для работы с потоками используются функция CreateThread.

ПОТОКИ

HANDLE CreateThread(

LPSECURITY ATTRIBUTES ProcAttr,

SIZT_T StackSize,

LPTHREAD_START_ROUTINE Func,

LPVOID Params,

DWORD Flags,

LPWORD ThreadId)

  1. Показывает NULL

  2. Размер стэка зависит от того, что делает поток

  3. Функция, которая будет запущена в качестве потока

  4. Параметр, который попадает в функцию как данные

  5. Создать, но не запускать

  6. Iв потока

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.

  1. Программа фонового копирования с получением заданий по каналу

- задания должны получаться программой по именованному каналу

- задание предоставляет собой пары имен файлов разделенных символом '|'

- для каждого отдельного задания запускается отдельный поток

------------------------------------------------------------------------------------

Для работы с именованным каналом используется функция CreateNamePipe

Именованные каналы.

Каналы – способ локального и сетевого взаимодействия.

  1. функции сервера

  2. функции клиента

Каналы должны быть с одним именем.

  1. СЕРВЕР

Создать канал: HANDLE CreateNamePipe(

LPCTSRT pipename,

DWORD openmode, // режим открытия

DWORD pipemode,

DWORD maxinstance,

DWORD outbufsize,

DWORD inbufsize,

LPSECURITY ATTRIBUTES ProcAttr,//атрибуты безопасности

)

Имя канала: \\.\pipe\<имя > - до 256 символов

FILE_FLAG_FIRST_PIPE_INSTANCE – может присутствовать во втором параметре:

PIPE_ACCESS_DUPLEX, PIPE_ACCESS_INBOUND, PIPE_ACCESS_OUTBOUND

FILE_FLAG_WRITE_THROUGH – если процессы находятся на разных машинах в сети

FILE_FLAG_OVERLAPPED – асинхронный режим (для канала)

PIPE_TYPE_BYTE и PIPE_TYPE_MESSAGE – каждая запись в канал – пакет

PIPE_READMODE_BYTE, PIPE_READMODE_MESSAGE

MAXINSTANCES – max допустимое число каналов с таким именем

PIPE_UNLIMITED_INSTANCES

DEFOULTTimeout – время ожидания

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]