Программирование планировщиков процессов. Программа, осуществляющая решение поставленной задачи с помощью многопоточного приложения

Страницы работы

Содержание работы

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСП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);

Похожие материалы

Информация о работе