69993

МНОГОЗАДАЧНОСТЬ И МНОГОПОТОЧНОСТЬ

Лабораторная работа

Информатика, кибернетика и программирование

Цель: Ознакомление с концепцией многозадачности и многопоточности современных операционных систем, получение практических навыков по составлению, написанию и отладке программ, содержащих параллельно функционирующие процедуры и функции.

Русский

2014-10-13

68.5 KB

14 чел.

Министерство образования и науки Украины

Харьковский Национальный Университет Радиоэлектроники

Кафедра ЭВМ

Лабораторная работа №5

Тема: «МНОГОЗАДАЧНОСТЬ И МНОГОПОТОЧНОСТЬ»

Выполнил:                                                                      Проверил:

ст. гр. КИ-08-4                                                                Бугрий А. Н.

Кравец Артём Валерьевич

2009

Лабораторная работа №5

Тема: «МНОГОЗАДАЧНОСТЬ И МНОГОПОТОЧНОСТЬ»

Цель: Ознакомление с концепцией многозадачности и многопоточности современных операционных систем, получение практических навыков по составлению, написанию и отладке программ, содержащих параллельно функционирующие процедуры и функции. 

Задание:

Вариант 6

Создать многопоточную программу, формирующую потоки трех типов. Каждый из потоков запускается соответствующим пунктом меню и захватывает соответственно 1,2,3 ресурса (максимальное число ресурсов по умолчанию – 8 и может меняться пользователем в окне диалога, вызываемом через меню). Количество, вид потоков, а также их состояние выводится на экран. Если число ресурсов не позволяет работать потоку, он находится в состоянии ожидания. Удаление потоков осуществляется через меню в порядке запуска (первым удаляется поток, запущенный первым).

Листинг:

include "stdafx.h"

#include "Laba_5.h"

#define MAX_LOADSTRING 100

// Глобальные переменные:

HINSTANCE hInst;        

TCHAR szTitle[MAX_LOADSTRING];     

TCHAR szWindowClass[MAX_LOADSTRING];

int i=0, j=0, k=0;

LONG x;

char str[23] = "Свободных ресурсов - 8";

char str1[] = "Запущено потоков 1го типа - 0";

char str2[] = "Запущено потоков 2го типа - 0";

char str3[] = "Запущено потоков 3го типа - 0";

HWND hWnd;

HANDLE hSmphr;

// Отправить объявления функций, включенных в этот модуль кода:

ATOM    MyRegisterClass(HINSTANCE hInstance);

BOOL    InitInstance(HINSTANCE, int);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance,

                    HINSTANCE hPrevInstance,

                    LPTSTR    lpCmdLine,

                    int       nCmdShow)

{

UNREFERENCED_PARAMETER(hPrevInstance);

UNREFERENCED_PARAMETER(lpCmdLine);

MSG msg;

HACCEL hAccelTable;

 // Инициализация глобальных строк

LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);

LoadString(hInstance, IDC_LABA_5, szWindowClass, MAX_LOADSTRING);

MyRegisterClass(hInstance);

 // Выполнить инициализацию приложения:

 if (!InitInstance (hInstance, nCmdShow))

{

 return FALSE;

}

hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_LABA_5));

 // Цикл основного сообщения:

 while (GetMessage(&msg, NULL, 0, 0))

{

 if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))

 {

  TranslateMessage(&msg);

  DispatchMessage(&msg);

 }

}

 return (int) msg.wParam;

}

ATOM MyRegisterClass(HINSTANCE hInstance)

{

WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style   = CS_HREDRAW | CS_VREDRAW;

wcex.lpfnWndProc = WndProc;

wcex.cbClsExtra  = 0;

wcex.cbWndExtra  = 0;

wcex.hInstance  = hInstance;

wcex.hIcon   = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_LABA_5));

wcex.hCursor  = LoadCursor(NULL, IDC_ARROW);

wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

wcex.lpszMenuName = MAKEINTRESOURCE(IDC_LABA_5);

wcex.lpszClassName = szWindowClass;

wcex.hIconSm  = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

 return RegisterClassEx(&wcex);

}

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

  hInst = hInstance; // Сохранить дескриптор экземпляра в глобальной переменной

  hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,

     CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

  if (!hWnd)

  {

     return FALSE;

  }

  ShowWindow(hWnd, nCmdShow);

  UpdateWindow(hWnd);

  return TRUE;

}

DWORD WINAPI Thread1(PVOID pvoid)

{

OpenSemaphore(NULL, TRUE,"MySemaphore");

i++;

 if ( WaitForSingleObject( hSmphr, 0 ) == WAIT_OBJECT_0 )

   ReleaseSemaphore( hSmphr, 1, &x );

wsprintf(str,"Свободных ресурсов - %i",x+1);

wsprintf(str1,"Запущено потоков 1го типа - %i",i);

InvalidateRect(hWnd, NULL, FALSE);

 return 0;

}

DWORD WINAPI Thread2(PVOID pvoid)

{

OpenSemaphore(NULL, TRUE,"MySemaphore");

j++;

 if ( WaitForSingleObject( hSmphr, 0 ) == WAIT_OBJECT_0 )

   ReleaseSemaphore( hSmphr, 1, &x );

wsprintf(str,"Свободных ресурсов - %i",x+1);

wsprintf(str2,"Запущено потоков 2го типа - %i",j);

InvalidateRect(hWnd, NULL, FALSE);

 return 0;

}

DWORD WINAPI Thread3(PVOID pvoid)

{

OpenSemaphore(NULL, TRUE,"MySemaphore");

k++;

 if ( WaitForSingleObject( hSmphr, 0 ) == WAIT_OBJECT_0 )

   ReleaseSemaphore( hSmphr, 1, &x );

wsprintf(str,"Свободных ресурсов - %i",x+1);

wsprintf(str3,"Запущено потоков 3го типа - %i",k);

InvalidateRect(hWnd, NULL, FALSE);

 return 0;

}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

 int wmId, wmEvent;

 static PAINTSTRUCT ps;

 static HDC hdc;

 static DWORD IDThread1, IDThread2, IDThread3;

 static HANDLE hT1, hT2, hT3;

 switch (message)

{

 case WM_CREATE:

 hSmphr = CreateSemaphore(NULL, 8, 8, "MySemaphore");

 break;

 case WM_COMMAND:

 wmId    = LOWORD(wParam);

 wmEvent = HIWORD(wParam);

 switch (wmId)

 {

  case IDM_STARTTHREAD1:

     hT1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread1,0,0,&IDThread1);

     WaitForSingleObject(hSmphr, INFINITE);

    break;

  case IDM_STARTTHREAD2:

     hT2 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread2,0,0,&IDThread2);

     WaitForSingleObject(hSmphr, INFINITE);

     WaitForSingleObject(hSmphr, INFINITE);

    break;

  case IDM_STARTTHREAD3:

     hT3 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread3,0,0,&IDThread3);

     WaitForSingleObject(hSmphr, INFINITE);

     WaitForSingleObject(hSmphr, INFINITE);

     WaitForSingleObject(hSmphr, INFINITE);

    break;

  case IDM_FINISHTHREAD1:

   ReleaseSemaphore(hSmphr,1,&x);

   TerminateThread(hT1, 0);

    i--;

   wsprintf(str,"Свободных ресурсов - %i",x+1);

   wsprintf(str1,"Запущено потоков 1го типа - %i",i);

   InvalidateRect(hWnd, NULL, FALSE);

    break;

  case IDM_FINISHTHREAD2:

   ReleaseSemaphore(hSmphr,2,&x);

   TerminateThread(hT2, 0);

    j--;

   wsprintf(str,"Свободных ресурсов - %i",x+2);

   wsprintf(str2,"Запущено потоков 2го типа - %i",j);

   InvalidateRect(hWnd, NULL, FALSE);

    break;

  case IDM_FINISHTHREAD3:

   ReleaseSemaphore(hSmphr,3,&x);

   TerminateThread(hT3, 0);

    k--;

   wsprintf(str,"Свободных ресурсов - %i",x+3);

   wsprintf(str3,"Запущено потоков 3го типа - %i",k);

   InvalidateRect(hWnd, NULL, FALSE);

    break;

  case IDM_ABOUT:

   DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);

   break;

  case IDM_EXIT:

   DestroyWindow(hWnd);

   break;

  default:

   return DefWindowProc(hWnd, message, wParam, lParam);

 }

 break;

 case WM_PAINT:

  hdc = BeginPaint(hWnd, &ps);

  RECT rt;

  GetClientRect(hWnd, &rt);

  TextOut(hdc, 350, 50, str, strlen(str));

  TextOut(hdc, 75, 50, str1, strlen(str1));

  TextOut(hdc, 75, 75, str2, strlen(str2));

  TextOut(hdc, 75, 100, str3, strlen(str3));

  EndPaint(hWnd, &ps);

 break;

 case WM_DESTROY:

 PostQuitMessage(0);

 break;

 default:

 return DefWindowProc(hWnd, message, wParam, lParam);

}

 return 0;

}

// Обработчик сообщений для окна "О программе".

INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

UNREFERENCED_PARAMETER(lParam);

 switch (message)

{

 case WM_INITDIALOG:

 return (INT_PTR)TRUE;

 case WM_COMMAND:

 if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)

 {

  EndDialog(hDlg, LOWORD(wParam));

  return (INT_PTR)TRUE;

 }

 break;

}

 return (INT_PTR)FALSE;

}

Результат:

Выводы: В этой лабораторной работе я ознакомился со структурой Windows-приложений, организацией взаимодействия программ с ОС, получил практические навыки по составлению, написанию и отладке простых программ. Ознакомился с ресурсами как средством создания визуального интерфейса и задания параметров и характеристик программного приложения.


 

А также другие работы, которые могут Вас заинтересовать

23654. Разработка графического интерфейса и базы данных каскадной системы регулирования температуры, расхода и концентрации в процессе ректификации стирола 3.53 MB
  Листинг программы unit Unit1; interface uses Windows Messages SysUtils Variants Classes Graphics Controls Forms Dialogs Grids ComCtrls ExtCtrls DBCtrls DBGrids StdCtrls Buttons DB DBTables ImgList ToolWin Mask TeEngine Series TeeProcs Chart DbChart Animate GIFCtrl; type TForm1 = classTForm PageControl1: TPageControl; TabSheet1: TTabSheet; TabSheet3: TTabSheet; PageControl2: TPageControl; TabSheet5: TTabSheet; DBNavigator1: TDBNavigator; DBGrid1: TDBGrid; BitBtn1: TBitBtn;...
23655. Управление качеством электронных средств 423 KB
  Непрерывной случайной величиной СВ называется величина которая при испытании может принять любое значение из заданного диапазона. Любое распределение характеризуется определенными характеристиками важнейшими из которых являются среднее значение и дисперсия. Несмещенной является оценка среднее значение которой совпадает со средним значением генерал ной совокупности. Здесь оценка истинное значение характеристики – оператор усреднения.
23656. Семантические сети 170 KB
  Семантические сети Семантической сетью является структура данных имеющая определенный смысл как сеть. Стандартного определения семантической сети не существует но обычно под ней подразумевают следующее: Семантическая сеть это система знаний имеющая определенный смысл в виде целостного образа сети узлы которой соответствуют понятиям и объектам а дуги отношениям между объектами. Следовательно всевозможные сети можно рассматривать как сети входящие в состав семантической сети. Поэтому в контексте знакомства с СОЗ семантические сети...
23657. Продукционные модели. ЕСЛИ - ТО (явление - реакция) 166 KB
  Эти две отличительные черты и определили широкое распространение методов представления знаний правилами. Программные средства оперирующие со знаниями представленными правилами получили название продукционных систем или систем продукции и впервые были предложены Постом в 1941 году. Общим для систем продукции является то что они состоят из трех элементов: Набор правил используемых как БЗ его еще называют базой правил; Рабочая память где хранятся предпосылки касающиеся отдельных задач а также результаты выводов получаемых на основе...
23658. Представление знаний с применением фреймов 143.5 KB
  Понятие фрейма и слота В сложных семантических сетях включающих множество понятий процесс обновления узлов и контроль связей между ними становится затруднительным. В каждом узле понятия определяются набором атрибутов и их значениями которые содержатся в слотах фрейма. Слот это атрибут связанный с узлом в системе основанной на фреймах. Слот является составляющей фрейма.
23659. Стратегии поиска в СОЗ 105.5 KB
  7 Начальныесостояния Цель конечные состояния Реализует возможность выбора Выполняет шаги от начального состояния к новым более близким к цели Исходные посылки и факты Поиск Стратегия поиска B A C C A B A B C A B C C B A B C A B A C C A B A B C C A B B A C A B C A C B 8. Стратегии поиска в СОЗ 8. Поиск в СОЗ Причем поиск конечного состояния выполняется автоматически на основе реализованной в СОЗ стратегии поиска которая: реализует возможность выбора; позволяет выполнять шаги от начального...
23660. Нечеткие множества в системах основанных на знаниях 462.5 KB
  Для ее решения вводится два показателя: П АiФ = sup min фu Aiu это возможность что нечеткое множество Ф принадлежит значению Аi атрибута Ã. Рассмотрим геометрическую интерпретацию определения ПА1Ф: min фu A1u – представляет собой треугольник SQR т. sup min фu A1u – это точка Q т. Тогда ПА1Ф = min {max 0 min 1 1 m1 m2 1 2 max 0 min 1 1 m2 m1 2 1 }.
23661. Основы построения систем основанных на знаниях (Соз) 68 KB
  Предположим нас интересует что имеет Иван: Запрос: имеет иван Вещь Ответ: Вещь = машина Если мы заполним базу еще рядом фактов имеет петр руб.500 имеет петр телевизор цена видео 4200 цена приемник 20 цена часы 70 тогда на аналогичный запрос но только относительно Петра мы получим ответ: Запрос: имеет петр Вещь Ответ: Вещь = часы Вещь = руб 500 Вещь = телевизор Заметим что имя петр мы вводим со строчной буквы так как это атом; а Вещь является переменной и записывается с заглавной буквы. Чтобы не...
23662. Экспертные системы. Назначения ЭС и основные требования к ним 78 KB
  Экспертные системы Система основанная на знаниях система программного обеспечения основными структурными элементами которой являются базы знаний и механизм логических выводов. Основными требованиями к ЭС являются: использование знаний связанно с конкретной предметной областью; приобретение знаний от эксперта; определение реальной и достаточно сложной задачи; наделение системы способностями эксперта. которые обладают общими качествами: имеют огромный багаж знаний о конкретной предметной области; имеют большой опыт работы в этой...