
- •Лабораторная работа № 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
Полные суммы рядов Маклорена