Управление потоками в Windows
Изучение основ создания и управления потоками в операционной системе Windows. Разработка многопоточного Win32-приложения, которое использует диалоговое окно для управления потоками процессов. Разработка способов вывода системной информации о потоках.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 25.04.2020 |
Размер файла | 215,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Министерство сельского хозяйства
Казахский агротехнический университет имени С. Сейфуллина
Отчет
По дисциплине “Системное программирование”
Лабораторная работа
Управление потоками в Windows
Выполнил: Омурзаков Ильяс
Проверил(а): Боранбаев А.А.
г. Нур-Султан 2020 г.
Цель работы: изучить основы создания и управления потоками в ОС Windows.
Цели и задачи данной работы: Разработать многопоточное Win32-приложение, которое использует диалоговое окно для управления потоками процессов. Дизайн диалогового окна задается вариантом, преподавателем или самостоятельно. Для визуализации работы потоков использовать соответствующие элементы управления диалога, графику. Приложение должно содержать три потока. Предусмотреть вывод системной информации о потоках (например, полей CONTEXT, временны параметры и т.д.). В отчете привести диаграмму состояния потоков, копии окон.
Ход работы. Виды потоков, состояния потока
Поток является последовательностью команд, обрабатываемых процессором. В рамках одного процессора могут находиться один или несколько потоков. Процесс предоставляет ресурсы, поток - команды и данные для обработки. Процесс содержащий один поток называется однопоточным, в противном случае - многопоточным.
Многопоточная модель охватывает 2 категории потоков и их комбинацию:
потоки на уровне пользователя ULT (User Level Thread);
потоки на уровне ядра KLT (Kernel Level Thread);
комбинированная модель UKLT.
ULT управляются самим приложением. KLT управляется самим ядром через интерфейс прикладного программирования средств ядра ОС.
управление поток windows
Рисунок 1 - состояние потока.
Структура CONTEXT
У каждого потока собственный набор регистров процессора, называемый контекстом потока.
Эта структура с именем CONTEXT отражает состояние регистров процессора на момент последнего исполнения потока. Когда потоку выделяется процессорное время, система инициализирует регистры процессора содержимым контекста и, разумеется, регистр -- указатель команд идентифицирует адрес следующей машинной команды, необходимой для выполнения потока.
Кроме того, в контекст включается указатель стека, который определяет адрес стека» принадлежащего потоку. Получить сведения о текущем состоянии регистров процессора. можно с помощью функции:
BOOL GetThreadContext(HANDLE hThread, PCONTEXT pContext);
В программе(результатах) это выглядит так:
CONTEXT ct; ct.ContextFlags = (CONTEXT_FULL);
if(!GetThreadContext(hThread, &ct)) {return FALSE; }
Рисунок 2 - Контекст первого потока
Создание потока
Для создания потока используется функция CreateThread. В программе поток 1 создается следующим образом:
hThread1 = CreateThread(NULL, 0, First_Thread, hDlg, CREATE_SUSPENDED, &Id1);
Как и при работе с функцией CreateProcess, для многих параметров можно задавать значения по умолчанию (@ или NULL). Третий параметр не может иметь значение по умолчанию, ему всегда передается адрес функции потока. Четвертый параметр часто используется для организации взаимосвязи вызывающего потока с дочерним потоком. При каждом вызове функции CreateThread система создает объект ядра «поток» с начальным значением счетчика его пользователей, равным единице. Система выделяет память под стек потока из адресного пространства процесса. Новый поток выполняется в адресном пространстве того же процесса, что и родительский поток.
Относительный приоритет потока
Задать приоритет потока можно с помощью функции SetThreadPriority. Так это выглядит в программе: SetThreadPriority(hThread1, prir);
Эта функция меняет класс приоритета процесса, определяемого описателем hThread1, в соответствии со значением параметра prir. Этот параметр принимает одно из значений: IDLЕ_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, HIGH _PRIORITY_CLASS, REALTIME_PRIORITY_CLASS. При успешном выполнении функция возвращает TRUE; в ином случае -- FALSE. Поскольку SetPriorityClass принимает описатель процесса, то можно изменить приоритет любого процесса, выполняемого в системе, -- если его описатель известен и есть соответствующие права доступа.
Потоковая функция
Функция потока должна иметь следующий прототип:
DWORD WINAPI ThreadFunc(LPVOID IpvThreadParm) { DWORD dwResult = 0;
return(dwResult);}
Параметр IpvThreadParm функции потока идентичен параметру IpvThreadParm, первоначально передаваемому в CreateThread. Последняя лишь передает этот параметр той функции, с которой начинается выполнение создаваемого потока. Таким образом, данный параметр позволяет передавать функции потока какое-либо инициализирующее значение (просто 32-битное значение или 32-битный указатель на структуру данных с дополнительной информацией).
Пример функции потока, визуализирующий свою работу прогресс-баром, приведен ниже.
DWORD WINAPI TrackBarThread1(PVOID pvParam)
{
int count = 0;
int max_count = 1000;
SendMessage(GetDlgItem(hDlg, IDC_PROGRESS1), PBM_SETRANGE, 0, (LPARAM)MAKELONG(0, 1000));
SendMessage(GetDlgItem(hDlg, IDC_PROGRESS1), PBM_SETSTEP, (WPARAM) TRUE, (LPARAM) 1);
SendMessage(GetDlgItem(hDlg, IDC_PROGRESS1), PBM_SETPOS, 0,(LPARAM) 0);
while(count < max_count)
{
Sleep(10);
++count;
SendMessage(GetDlgItem(hDlg, IDC_PROGRESS1), PBM_STEPIT, 0, 0);
}
return 0;
}
Функции WinAPI для управления потоками
hThread2 = CreateThread(NULL, 0, Second_Thread, hDlg, CREATE_SUSPENDED, &Id2);
Назначение потоку относительного приоритета:
SetThreadPriority(hThread2, prir);
Возобновление потока: ResumeThread(hThread1);.
Приостановка потока: SuspendThread(hThread1);.
Получение времени создания, окончания потока и др.:
GetThreadTimes(hThread1,&pftCreationTime1, &pftExitTime1,&pftKernelTime1,&pftUserTime1);
Получение контекста потока:
GetThreadContext(hThread, &ct).
Завершение потока: ExitThread(0);.
Завершение потока извне: TerminateThread(hThread1, 0);.
Окончание потока
Существует несколько способов завершения потока:
1) функция потока возвращает управление
2) вызов функции ExitThread из потока
3) вызов функции TerminateThread
4)завершение процесса, содержащего данный поток
Время выполнения потока
Временные показатели работы потока определяются функцией GetThreadTimes, которая возвращает четыре временных параметра: время создания, время завершения, время выполнения, время выполнения. В программе определение и вывод времени создания потоков можно выполнить следующим образом:
GetThreadTimes(hThread[i],&creationTime,&exitTime,&kernelTime,&userTime);
// Дата и время создания процесса по Гринвичу
FileTimeToSystemTime(&creationTime, &stUTC);
// Конвертируем время создания процесса в местное время
SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);
j+=sprintf(buf+j, "Время создания %d-го потока:%02d/%02d/%d %02d:%02d:%02d\r\n", i+1, stLocal.wDay,
stLocal.wMonth, stLocal.wYear, stLocal.wHour,
stLocal.wMinute, stLocal.wSecond);
// Дата и время завершения процесса по Гринвичу
FileTimeToSystemTime(&exitTime, &stUTC);
// Конвертируем время завершения процесса в местное время
SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);
j+=sprintf(buf+j, "Время завершения %d-го потока: %02d/%02d/%d %02d:%02d:%02d\r\n\n", i+1, stLocal.wDay,
stLocal.wMonth, stLocal.wYear, stLocal.wHour,
stLocal.wMinute, stLocal.wSecond);
Результаты работы программного обеспечения
Рисунок 3 - Результат работы программы
Рисунок 4 - Информация о потоках
Выводы
Потоки -- это последовательность или цикл управления в процессе. Они обладают преимуществами по сравнению с созданием нового процесса, они позволяют создать программу, которая выполняет несколько задач одновременно. Множественные потоки менее требовательны к ресурсам, чем множественные процессы.
Функция CreateThread создает новый поток.
Когда поток завершается при выполнении потоковой функции, или при вызове функций ExitThread или TerminateThread, или при завершении процесса.
При выполнении данной лабораторной работы были выполнены все поставленные цели и задачи.
Размещено на Allbest.ru
...Подобные документы
Программирование в операционной системе Windows. Работа с потоками и процессами ОС. Методы их создания. Основы вызова API-функций. Пример создания диалогового окна без использования файла ресурсов. Разработка программы с помощью 32-битного ассемблера.
курсовая работа [107,6 K], добавлен 18.05.2014Сущность основных аспектов эффективного функционирования в операционной системе Windows. Способ создания локальных сетей в операционной системе Windows XP, изучение их возможностей. Глобальная сеть Интернет в ОС Windows, структура и основные программы.
курсовая работа [352,8 K], добавлен 15.02.2009Проектирование службы Windows и приложения для управления этой службой, которое позволит контролировать данные приложения - запускать и завершать определенные процессы по желанию пользователя через определенные промежутки времени. Инструкция по установке.
курсовая работа [2,8 M], добавлен 05.01.2013Разработка приложения с помощью среды Microsoft Visual Studio 2010 Express. Интерфейс приложения. Разработка конечного программного продукта, демонстрирующего работу многопоточного приложения, использующего взаимоисключение на основе критической секции.
лабораторная работа [300,4 K], добавлен 21.07.2012Взаимодействие процессов и потоков в операционной системе, основные алгоритмы и механизмы синхронизации. Разработка школьного курса по изучению процессов в операционной системе Windows для 10-11 классов. Методические рекомендации по курсу для учителей.
дипломная работа [3,2 M], добавлен 29.06.2012Задачи и особенности консоли управления Microsoft, ее преимущества и типы оснасток. Внешний вид пользовательского интерфейса консоли, порядок ее создания и установка опций. Настройка панели задач. Управление пользователями и группами в системе Windows XP.
презентация [684,2 K], добавлен 20.12.2013История создания и развития операционной системы Microsoft Windows. Особенности каждой из ее версий. Новшества в интерфейсе, встроенных программах, системе управления и использования ОС, увеличение скорости выполнения приложений возможностями мультимедиа.
реферат [29,5 K], добавлен 30.11.2013Изучение технических возможностей операционной системы Windows XP – ОС семейства Windows NT корпорации Microsoft. Особенности интегрированного программного обеспечения. Дополнительные аплеты в панели управления Windows. Графический интерфейс пользователя.
презентация [7,4 M], добавлен 23.05.2010Общее понятие об оперативной системе Windows Vista. Сравнительный анализ систем Windows XP и Windows Vista. Специфика процесса установки, трехмерный интерфейс Aero Glass, действие некоторых мини-приложений. Новости управления папками, работа в интернете.
реферат [2,4 M], добавлен 01.02.2010Использование операционных систем Microsoft Windows. Разработка операционной системы Windows 1.0. Возможности и характеристика последующих версий. Выпуск пользовательских операционных систем компании, доработки и нововведения, версии Windows XP и Vista.
реферат [23,3 K], добавлен 10.01.2012Создание программы "MP3 Player", воспроизводящей аудио файлы формата MP3 для работы в операционной системе Windows с использованием языка программирования Delphi. Разработка интерфейса, алгоритма и документации к разработанному программному продукту.
курсовая работа [625,0 K], добавлен 18.07.2012Представление системы управления конфликтными потоками как системы массового обслуживания с переменной структурой. Вероятностные свойства процесса управления. Построение имитационной модели системы массового обслуживания, математический аппарат.
дипломная работа [1,4 M], добавлен 27.01.2016Новая операционная система – Windows Vista. Новая интеллектуальная технология управления системной памятью. Обеспечение совместимости. Преимущества Windows Vista перед Windows XP. Варианты программного обеспечения Windows Vista. Свойство мобильности.
реферат [18,6 K], добавлен 19.11.2008Правовые основы защиты информации на предприятии. Анализ среды пользователей. Автоматизированная система предприятия. Краткие сведения об операционной системе Windows XP. Классификация троянских программ. Способы защиты операционной системы Windows XP.
дипломная работа [187,3 K], добавлен 14.07.2013Разработка приложения, которое осуществляет удаленный доступ управления компьютером с операционной системой Linux с компьютера с ОС Windows. Реализация функциональной части. Графический интерфейс клиента и сервера. Разработка интеграционных тестов.
курсовая работа [1,1 M], добавлен 28.04.2014Понятия вычислительной системы, ее аппаратное обеспечение. Конфигурация и устройство компьютера. Элементы управления операционной системы Windows ХР. Стандартные и служебные приложения ОС. Архитектура фон Нейман. Работа в программе Microsoft Excel.
шпаргалка [47,0 K], добавлен 29.12.2010Характеристика операционной системы. История развития Windows. Сравнительная характеристика версий Windows. Элементы и инструменты Windows XP. Прикладные программы в Windows XP. Работа настольных и портативных компьютеров под управлением Windows.
доклад [19,1 K], добавлен 16.10.2011Разработка тестирующего приложения, которое будет наглядно показывать, как должна выглядеть тестирующая программа для вычисления уровня интеллекта. Программная среда разработки, характеристика основных возможностей приложения. Стандартные диалоговые окна.
курсовая работа [716,9 K], добавлен 02.12.2013Операционная система MS-DOS: история и характеристика. Обзор стандартных программ операционной системы Windows. Способы запуска программ. Служебные приложения Windows и их назначение: диспетчер задач, проверка, очистка, дефрагментация и архивация диска.
реферат [221,4 K], добавлен 06.01.2015Разработка и практическая апробация действия драйвер-фильтра клавиатуры для операционной системы Windows, переопределяющего значение любых клавиш и отключающего клавиши клавиатуры. Составление программы для установки и управления данным драйвером.
курсовая работа [226,8 K], добавлен 18.06.2009