МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПsУБЛИКИ БЕЛАРУСЬ
Учреждение образования
«Гомельский государственный технический университет имени П. О. Сухого»
Факультет автоматизированных и информационных систем
Кафедра «Информационные технологии»
ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №5
по дисциплине «Программирование синхронизации процессов в ОС Windows»
на тему: «Программирование планировщиков процессов»
Выполнил: студент группы ИТ-32 |
|
|
|
Проверил преподаватель: |
|
|
|
Дата сдачи отчета __________________ |
|
Дата допуска к защите ______________ |
|
Дата защиты ______________________ |
Гомель 2013
Цель: разработать программу, осуществляющую решение поставленной задачи с помощью многопоточного приложения
Задание:
Результаты вычислений сравнить с однопоточным приложением. Интерфейс, создание и синхронизацию потоков реализовать средствами Win API.
Листинг FMain:
#include <tchar.h>
#include <time.h>
#include "FMain.h"
#include "ControlsID.h"
struct ExtendArgs
{
Args* args;
clock_t* time;
};
FMain::FMain()
{
mySolver1 = nullptr;
mySolver2 = nullptr;
AddMessage(WM_CREATE, this, &FMain::OnCreate);
AddMessage(WM_DESTROY, this, &FMain::OnDestroy);
AddMessage(WM_COMMAND, this, &FMain::OnCommand);
}
FMain::~FMain()
{
}
LRESULT FMain::OnCreate(LPARAM lparam, WPARAM wparam)
{
TCHAR taskA_TEXT[] = _T("Введите данные для отрезка [A;B]:");
TCHAR taskB_TEXT[] = _T("Введите данные для отрезка [C;D]:");
TCHAR start_TEXT[] = _T("Введите левую границу интегрирования:");
TCHAR end_TEXT[] = _T("Введите правую границу интегрирования:");
TCHAR step_TEXT[] = _T("Введите шаг интегрирования:");
CreateLabel(taskA_TEXT, 35, 5, 260, 20, ID_LABEL);
CreateLabel(start_TEXT, 5, 25, 280, 20, ID_LABEL);
CreateLabel(end_TEXT, 5, 45, 285, 20, ID_LABEL);
CreateLabel(step_TEXT, 5, 65, 280, 20, ID_LABEL);
CreateTextBox(L"1", 300, 20, 60, 20, ID_TEXTBOX_A_START);
CreateTextBox(L"2", 300, 42, 60, 20, ID_TEXTBOX_A_END);
CreateTextBox(L"0.1", 300, 64, 60, 20, ID_TEXTBOX_A_STEP);
CreateLabel(taskB_TEXT, 35, 105, 260, 20, ID_LABEL);
CreateLabel(start_TEXT, 5, 125, 280, 20, ID_LABEL);
CreateLabel(end_TEXT, 5, 145, 285, 20, ID_LABEL);
CreateLabel(step_TEXT, 5, 165, 280, 20, ID_LABEL);
CreateTextBox(L"2", 300, 120, 60, 20, ID_TEXTBOX_B_START);
CreateTextBox(L"3", 300, 142, 60, 20, ID_TEXTBOX_B_END);
CreateTextBox(L"0.2", 300, 164, 60, 20, ID_TEXTBOX_B_STEP);
CreateButton(L"Рассчитать", 130, 200, 105, 20, ID_BUTTON_SOLVE);
return 0;
}
LRESULT FMain::OnDestroy(LPARAM lparam, WPARAM wparam)
{
PostQuitMessage(0);
return 0;
}
LRESULT FMain::OnCommand(LPARAM lparam, WPARAM wparam)
{
if ((HIWORD(wparam) == 0) && (LOWORD(wparam) == ID_BUTTON_SOLVE))
{
clock_t mySolver1Time = NULL;
clock_t mySolver2Time = NULL;
wchar_t str[MAX_SIZE];
GetDlgItemText(_hwnd, ID_TEXTBOX_A_START, str, MAX_SIZE);
double start = _wtof(str);
GetDlgItemText(_hwnd, ID_TEXTBOX_A_END, str, MAX_SIZE);
double end = _wtof(str);
GetDlgItemText(_hwnd, ID_TEXTBOX_A_STEP, str, MAX_SIZE);
double step = _wtof(str);
mySolver1 = new IntegralSolver(start, end, step, "out[A;B].txt");
ExtendArgs eA1;
eA1.args = mySolver1->myArgs;
eA1.time = &mySolver1Time;
HANDLE tChecker1 = (HANDLE)_beginthreadex(NULL, 0, &SolverChecker, &eA1, 0, NULL);
mySolver1Time = clock();
IntegralSolver::GetAnswer(mySolver1->myArgs);
GetDlgItemText(_hwnd, ID_TEXTBOX_B_START, str, MAX_SIZE);
start = _wtof(str);
GetDlgItemText(_hwnd, ID_TEXTBOX_B_END, str, MAX_SIZE);
end = _wtof(str);
GetDlgItemText(_hwnd, ID_TEXTBOX_B_STEP, str, MAX_SIZE);
step = _wtof(str);
mySolver2 = new IntegralSolver(start, end, step, "out[C;D].txt");
ExtendArgs eA2;
eA2.args = mySolver2->myArgs;
eA2.time = &mySolver2Time;
HANDLE tChecker2 = (HANDLE)_beginthreadex(NULL, 0, &SolverChecker, &eA2, 0, NULL);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.