- •Лабораторная работа № 2 потоки и работа с ними в операционной системе windows
- •Теоретические сведения
- •Создание потока
- •Приостановка потока
- •Возобновление потока
- •Завершение потока
- •Коды завершения в ос Windows
- •Установка приоритета потока
- •Относительные приоритеты потоков
- •Получение приоритета потока
- •Все функции работы с потоками
- •Пример работы с потоками
- •Программа работы
Пример работы с потоками
DWORD WINAPI ThreadProc( LPVOID lpParam ) // пользовательская функция потока
{
int S = 0;
int n = *(int*)(lpParam);
for (int i=1; i< n; i++) {
S++;
}
Form1->Edit2->Text = S;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CreateClick(TObject *Sender)
{
HANDLE hThread; //дескриптор потока
DWORD dwThreadId; //идентификатор потока
int n;
n = Edit1->Text.ToInt();
hThread = CreateThread( // создание потока
NULL, // атрибуту защиты по умолчанию
0, // Размер стека по умолчанию
ThreadProc, // Функция потока
&n, // Аргумент поточной функции
0, // Флаги создания
&dwThreadId); // возвращаемый идентификатор потока
CloseHandle(hThread); //удаление объекта потока из памяти
}
Программа работы
В папке «Параллельное программирование» создать подпапку «Лабораторная работа №2».
Запустить программу C++ Builder XEи создать новый проект с типомVCL Forms Application.
Сохранить все его файлы в папке с именем «Лабораторная работа №2», задав название проекта по Вашей фамилии на английском языке (расширение cbproj).
Разработать форму, показанную на рисунке 1.
Рис. 1. Интерфейс формы
В обработчике кнопки «Рассчитать» разработать программу для нахождения суммы ряда, в соответствии с заданием своего варианта (Таблица №1).
Таблица №1
Варианты задания
№ Варианта |
Ряд |
№ Варианта |
Ряд |
1 |
14 | ||
2 |
15 | ||
3 |
16 | ||
4 |
17 | ||
5 |
18 | ||
6 |
19 | ||
7 |
20 | ||
8 |
21 | ||
9 |
22 | ||
10 |
23 | ||
11 |
24 | ||
12 |
25 | ||
13 |
26 |
Запустить проект на выполнение командой Run(F9) и подобрать количество слагаемых, необходимых для расчета суммы ряда с заданной точностью (ε =10-10).
Разработать главное меню приложения следующим образом.
В обработчике пункта «Создать» предусмотреть выполнение предыдущей программы в отдельном потоке.
Вычислить время выполнения потока при разных классах приоритетах процессах и относительных приоритетах потоков с помощью программы ProcessExplorer. Результаты представить в отчете в виде таблицы, с указанием номера приоритета, класса процесса и относительного приоритета потока.
Обработать подпункты меню «Поток для созданая потока в режиме ожидания», возобновления, приостановки и удаления его. Подтвердить их работоспособность с помощью программы Process Explorer. Записать в отчет обработчики подпунктов и вставить скриншоты программыProcess Explorer.
Приложение 1
Полные суммы рядов Маклорена