Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учеб пособие по КР, СПО.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.72 Mб
Скачать

Продолжение прил. П3

addstr(#1: Set event S13 ...);

SetEvent(event_obj[S13]);

addstr(#1: Sleep: (Waiting for S31 and S41) ...);

//Функция ожидания нескольких объектов события

WaitForMultipleObjects(2, &event_obj[S31], true, INFINITE);

addstr(#1: Restore: (S31 and S41 are setting up)...);

//При делении на 0 выводится сообщение

//об ошибке (функция MessageBox)

if(!input_var[K]) {

MessageBox(hMainDlg, "Divide by NULL error!\nReenter some variables!", "Error", MB_ICONERROR);

goto _ex;

}

addstr(#1: A = a / k ...);

// Вычисление результата с записью в переменную

//input_var[A]

input_var[A] /= input_var[K];

wsprintf(buf, "Result A = %li", input_var[A]);

//Вывод результата на экран (функция MessageBox)

MessageBox(hMainDlg, buf, "Result", 0);

addstr(#1: Exit thread ...);

_ex:

EnableWindow(GetDlgItem(hMainDlg, IDC_START), true);

EnableWindow(GetDlgItem(hMainDlg, IDC_TERMINATE),

false);

}

void Thread2() { //Функция - второй тред

addstr(#2: Starting thread ...);

addstr(#2: c = c + d ...);

input_var[C] += input_var[D];

addstr(#2: Sleep: (Waiting for S12) ...);

//Функция ожидания одного объекта события

WaitForSingleObject(event_obj[S12], INFINITE);

Продолжение прил. П3

addstr(#2: Restore: (S12 is setting up) ...);

addstr(#2: a = a * c ...);

input_var[A] *= input_var[C];

addstr(#2: Sleep: (Waiting for S32) ...);

WaitForSingleObject(event_obj[S32], INFINITE);

addstr(#2: Restore: (S32 is setting up) ...);

addstr(#2: a = a * e ...);

input_var[A] *= input_var[E];

addstr(#2: Set event S24 ...);

SetEvent(event_obj[S24]);

addstr(#2: Exit thread ...);

}

void Thread3() { //Функция - третий тред

addstr(#3: Starting thread ...);

addstr(#3: e = e + f ...);

input_var[E] += input_var[F];

addstr(#3: e = e + g ...);

input_var[E] += input_var[G];

addstr(#3: Set event S32 ...);

SetEvent(event_obj[S32]);

addstr(#3: Sleep: (Waiting for S13) ...);

WaitForSingleObject(event_obj[S13], INFINITE);

addstr(#3: Restore: (S13 is setting up) ...);

addstr(#3: k = k * l ...);

input_var[K] *= input_var[L];

addstr(#3: Set event S31 ...);

SetEvent(event_obj[S31]);

addstr(#3: Exit thread ...);

}

void Thread4() { //Функция - четвертый тред

addstr(#4: Starting thread ...);

addstr(#4: h = h * i ...);

input_var[H] *= input_var[I];

addstr(#4: h = h * j ...);

input_var[H] *= input_var[J];

addstr(#4: Sleep: (Waiting for S24) ...);

WaitForSingleObject(event_obj[S24], INFINITE);

addstr(#4: Restore: (S24 is setting up) ...);

Продолжение прил. П3

addstr(#4: a = a - h ...);

input_var[A] -= input_var[H];

addstr(#4: Set event S41 ...);

SetEvent(event_obj[S41]);

addstr(#4: Exit thread ...);

}

//Функция получения входных переменных

bool GetOurVariables(HWND hDlg) {

char varbuffer[10];

for(int a = IDC_EDIT1; a <= IDC_EDIT13; a++) {

input_var[a - IDC_EDIT1] = 0 ;

if(!GetDlgItemText(hDlg, a, varbuffer, 10))

return false ;

DWORD mul = 1;

for(int b = lstrlen(varbuffer) - 1;

b >= 0; b--, mul *= 10)

input_var[a - IDC_EDIT1] +=

(varbuffer[b] - 0x30) * mul ;

}

return true ;

}

//Процедура обработки диалогового окна

LRESULT CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {

DWORD ThreadID; //ThreadID - уникальный номер

//треда

//Обработка сообщений

switch (uMsg) {

case WM_COMMAND: {

switch (LOWORD(wParam)) {

//Обработка сообщения по нажатии

//кнопки START

case IDC_START: {

//Проверка введенных значений

if(!GetOurVariables(hDlg)) {

//Если данные не

//введены,

//то выводится

//сообщение (функция

//MessageBox)