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-приложений, организацией взаимодействия программ с ОС, получил практические навыки по составлению, написанию и отладке простых программ. Ознакомился с ресурсами как средством создания визуального интерфейса и задания параметров и характеристик программного приложения.


 

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

74474. ОПЕРАТИВНО-ПРОИЗВОДСТВЕННОЕ ПЛАНИРОВАНИЕ 163.5 KB
  В процессе ОПП разрабатываются календарноплановые нормативы план выпуска продукции предприятия по месяцам года; оперативнокалендарные планы выпуска и графики производства узлов и деталей цехами участками по месяцам неделям суткам сменам иногда часам. Выполняются объемные расчеты загрузки оборудования и площадей; организуется сменносуточное планирование оперативный учет хода производства контроль и регулирование его диспетчирование. ОПП слагается из календарного планирования и оперативного регулирования хода производства ...
74475. ЭКОНОМИЧЕСКАЯ ОЦЕНКА ПЛАНОВ 54 KB
  Основными оценочными показателями эффективности плановой деятельности являются как абсолютные так и относительные значения затрат и результатов доходов и расчетов издержек и прибыли и других общеэкономических или внутрипроизводственных стандартов и нормативов. Наиболее важными планово-экономическими показателями являются эффект и эффективность стоимость и доходность. Эффект показывает степень достижения некоторого заданного результата и в общем виде представляет собой разность между...
74476. ИСПОЛЬЗОВАНИЕ В ПЛАНИРОВАНИИ ПРОГРАММНЫХ ПРОДУКТОВ 42 KB
  Современные персональные компьютеры способные поддерживать сложное графическое программное обеспечение и обрабатывать большие массивы планово-экономических данных могут применяться как для многопользовательских систем с несколькими рабочими станциями так и для обеспечения отдельных видов плановой деятельности. В системе автоматизированного планирования важнейшее значение имеет база данных представляющая собой пакет программ которые обеспечивают запоминание сортировку поиск объединение структуризацию информации на основе использования...
74477. СУЩНОСТЬ И ФУНКЦИИ ПЛАНИРОВАНИЯ В УПРАВЛЕНИИ 98.5 KB
  Предмет метод и задачи планирования В условиях рыночной экономики устойчивость и успех любого хозяйствующего субъекта может обеспечить только эффективное планирование его экономической деятельности. Сущность планирования в условиях рыночной экономики заключается в научном обосновании на предприятиях предстоящих экономических целей их развития и форм хозяйственной деятельности выбора наилучших способов их осуществления на основе наиболее полного выявления требуемых рынком видов объемов и...
74478. ПЛАНОВЫЕ РАСЧЕТЫ И ПОКАЗАТЕЛИ 86.5 KB
  Расчетные нормы и нормативы одновременно могут быть как абсолютными так и относительными величинами. Так при планировании трудовых затрат исходными чаще всего служат нормативы времени а производными расчетные нормы времени. Нормы в отличие от нормативов имеют конкретное отраслевое или внутрипроизводственное назначение. Нормы разрабатываются обычно на краткосрочный заранее установленный период их применения в заданных производственных условиях с учетом различных производственно-хозяйственных факторов.
74479. СТРАТЕГИЧЕСКОЕ ПЛАНИРОВАНИЕ 70 KB
  Выбор стратегии предприятия Стратегическое планирование задает перспективные направления развития предприятия определяет основные виды его деятельности позволяет увязать в единую систему маркетинговую проектную производственную и финансовую деятельность. Стратегический план обеспечивает адаптацию предприятия к внешней среде к распределению ресурсов и внутреннюю координацию деятельности с целью выявления сильных и слабых сторон. Стратегический план на крупных предприятиях как правило долгосрочный. Но временной период стратегического...
74480. ПЛАНИРОВАНИЕ ПРОИЗВОДСТВА И РЕАЛИЗАЦИИ ПРОДУКЦИИ 166 KB
  Планирование производства продукции работ и услуг должно удовлетворять на всех действующих предприятиях конкретные потребности покупателей заказчиков или потребителей и быть тесно связанным с разрабатываемой общей стратегией развития предприятия проведением маркетинговых исследований проектированием конкурентоспособной продукции организацией ее производства и реализации а также с выполнением других функций и видов внутрихозяйственной деятельности. В годовом плане производства каждого...
74481. ПЛАНИРОВАНИЕ ТЕХНИЧЕСКОГО РАЗВИТИЯ ПРОИЗВОДСТВА 149.5 KB
  Планирование технического развития производства состоит из комплекса технических организационных планово-экономических и социальных мероприятий направленных на повышение технического уровня производства увеличение выпуска высококачественной продукции роста производительности труда улучшение использования основных фондов производственных мощностей материальных и трудовых ресурсов совершенствование внутризаводской системы управления планирования экономического стимулирования улучшение...
74482. ПЛАНИРОВАНИЕ РЕСУРСНОГО ОБЕСПЕЧЕНИЯ ДЕЯТЕЛЬНОСТИ ПРЕДПРИЯТИЙ 98 KB
  Любое предприятие планируя величину прибыли должно взвешивать выгоды от приобретения каждой дополнительной единицы ресурсов позволяющей ему производить и продавать больше продукции. Предприятие принимает решение о приобретении дополнительных ресурсов на основе сравнения получаемого или планируемого предельного дохода от применения этого ресурса с его предельными издержками. Перспективное планирование потребности различных ресурсов на каждом предприятии должно ориентироваться на удовлетворение имеющегося спроса на продукцию и...