С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 14.10.2019
Сообщений: 7

Применением методов параллельного вычисления для решения математического выражения

14.10.2019, 21:23. Показов 1139. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Делаю себе курсовую по системному программному обеспечению есть задание

Есть исходный код(main.cpp) (ниже) и заголовочный файл(main.h), resource.h нет смысла выкладывать он сам сгенерировался, уверен, что написал все правильно, но при компиляции, после ввода значений в появившееся окно, ничего не происходит, приложу скрин , в чем может быть ошибка? Если есть проблемы со синтаксисом, прошу прощения)

(main.cpp)
#include <windows.h>
#include <math.h>
#include "main.h"
#include "resource.h"
DWORD input_var[13]; // Массив входных переменных
HANDLE event_obj[6]; // Массив хендлов объектов синхронизации
HANDLE hThread[4]; // Массив хендлов тредов
//Массив указателей на функции тредов
LPTHREAD_START_ROUTINE pThread[4] = {
(LPTHREAD_START_ROUTINE)Thread1,
(LPTHREAD_START_ROUTINE)Thread2,
(LPTHREAD_START_ROUTINE)Thread3,
(LPTHREAD_START_ROUTINE)Thread4
};
//Хендл диалогового окна
HWND hMainDlg;
void Thread1() {
char buf[30];
addstr(#1: Starting thread ...);
addstr(#1: c = c * d ...);
input_var[C] *= input_var[D];

addstr(#1: c = sqrt(c) ...);
input_var[C] = (DWORD)sqrt((double)input_var[C]);

if (!input_var[C]) {

MessageBox(hMainDlg, "Divide by NULL error!\nReenter some variables!", "Error", MB_ICONERROR);
EnableWindow(GetDlgItem(hMainDlg, IDC_START), true);
EnableWindow(GetDlgItem(hMainDlg, IDC_TERMINATE), false);
}
addstr(#1: b = b / c ...);
input_var[B] /= input_var[C];
addstr(#1: Set event S1 ...);
SetEvent(event_obj[S1]);

if (!input_var[M]) {

MessageBox(hMainDlg, "Divide by NULL error!\nReenter some variables!", "Error", MB_ICONERROR);
EnableWindow(GetDlgItem(hMainDlg, IDC_START), true);
EnableWindow(GetDlgItem(hMainDlg, IDC_TERMINATE), false);
}
addstr(#1: Sleep: (Waiting for S6) ...);
WaitForSingleObject(event_obj[S6], INFINITE);
addstr(#1: Restore: (S6 is setting up) ...);
addstr(#1: a = a / m ...);
input_var[A] /= input_var[M];
wsprintf(buf, "Result A = %li", input_var[A]);

//Вывод результата на экран (функция MessageBox)
//MessageBox(hMainDlg, buf, "Result", 0);
addstr(#1: Exit thread ...);

}
void Thread2()
{
//Функция - второй тред
addstr(#2: Starting thread ...);
addstr(#2: k = k + l ...);
input_var[K] += input_var[L];
addstr(#2: Set event S2 ...);
SetEvent(event_obj[S2]);

if (!input_var[I]) {

MessageBox(hMainDlg, "Divide by NULL error!\nReenter some variables!", "Error", MB_ICONERROR);
EnableWindow(GetDlgItem(hMainDlg, IDC_START), true);
EnableWindow(GetDlgItem(hMainDlg, IDC_TERMINATE), false);
}
addstr(#2: h = h / i ...);
input_var[H] /= input_var[I];

addstr(#2: h = h * j ...);
input_var[G] *= input_var[H];
addstr(#2: Set event S3 ...);
SetEvent(event_obj[S3]);
addstr(#2: Exit thread ...);
}
void Thread3() { //Функция - третий тред
addstr(#3: Starting thread ...);
addstr(#3: e = e - f ...);
input_var[E] -= input_var[F];
addstr(#3: Set event S4 ...);
SetEvent(event_obj[S4]);

addstr(#3: Sleep: (Waiting for S2 and S3 ) ...);
WaitForMultipleObjects(2, &event_obj[S2], true, INFINITE);
addstr(#3: Restore: (S2 and S3 is setting up) ...);
addstr(#3: h = h - k ...);
input_var[B] /= input_var[C];

if (!input_var[H]) {

MessageBox(hMainDlg, "Divide by NULL error!\nReenter some variables!", "Error", MB_ICONERROR);
goto _ex;
}
addstr(#3: g = g / h ...);
input_var[G] /= input_var[H];
addstr(#3: Set event S5 ...);
SetEvent(event_obj[S5]);
addstr(#3: Exit thread ...);
_ex:
EnableWindow(GetDlgItem(hMainDlg, IDC_START), true);
EnableWindow(GetDlgItem(hMainDlg, IDC_TERMINATE), false);
}
void Thread4() { //Функция - четвертый тред
addstr(#4: Starting thread ...);
addstr(#4: Sleep: (Waiting for S1) ...);
WaitForSingleObject(event_obj[S1], INFINITE);
addstr(#4: Restore: (S1 is setting up) ...);
addstr(#4: a = a - b ...);
input_var[A] -= input_var[B];

addstr(#4: Sleep: (Waiting for S4) ...);
WaitForSingleObject(event_obj[S4], INFINITE);
addstr(#4: Restore: (S4 is setting up) ...);
addstr(#4: a = a * e ...);
input_var[A] *= input_var[E];

addstr(#4: Sleep: (Waiting for S5) ...);
WaitForSingleObject(event_obj[S5], INFINITE);
addstr(#4: Restore: (S5 is setting up) ...);
addstr(#4: a = a - g ...);
input_var[A] -= input_var[G];
addstr(#4: Set event S6 ...);
SetEvent(event_obj[S6]);
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)
MessageBox(hDlg, "Enter all variables and run again!", "Attention", MB_ICONINFORMATION);
return false;
}
//Функция отправки сообщения
//в ListBox (в данном случае
//очистка ListBox)
SendDlgItemMessage(hDlg, IDC_LISTING, LB_RESETCONTENT, 0, 0);
//Цикл по созданию тредов
for (int a = THREAD1;
a <= THREAD4; a++) {
//Заполнение массива
//hThread хендлами
//тредов
hThread[a] = CreateThread(NULL, NULL, pThread[a], NULL, NULL, &ThreadID);
//Установка приоритетов
//тредов
SetThreadPriority(hThread[a], THREAD_PRIORITY_TIME_CRITICAL);
}
//Функции "активации деактивации" кнопок START и TERMINATE
EnableWindow(GetDlgItem(hDlg, IDC_START), false);
EnableWindow(GetDlgItem(hDlg, IDC_TERMINATE), true);
} break;
//Обработка сообщения по нажатии
//кнопки TERMINATE
case IDC_TERMINATE: {
//Цикл по принудительному завершению всех тредов (функция TerminateThread)
for (int a = THREAD1; a <= THREAD4; a++) {
TerminateThread(hThread[a], false);
}
//Функции "активации деактивации" кнопок START и TERMINATE
EnableWindow(GetDlgItem(hDlg, IDC_TERMINATE), false);
EnableWindow(GetDlgItem(hDlg, IDC_START), true);
}
}
}
break;
//Обработка сообщения при создании диалогового приложения

case WM_INITDIALOG: {
hMainDlg = hDlg;
//Функция отправки сообщения
SendMessage(hDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(0, IDI_EXCLAMATION));
}
break;
//Обработка сообщения по нажатии кнопки CLOSE
case WM_CLOSE:
//Функция завершения диалогового приложения
EndDialog(hDlg, 0);
}
return false;
}

//Точка входа в программу
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
//Цикл по созданию объектов события функцией
//CreateEvent
for (int a = S1; a <= S6; a++) {
event_obj[a] = CreateEvent(NULL, false, false, NULL);
}
//Функция создания диалогового окна
DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_MAINDLG), 0, (DLGPROC)DlgProc, 0);
return false;
}

(main.h)
#ifndef MAIN_H
#define MAIN_H
#define A 0
#define B 1
#define C 2
#define D 3
#define E 4
#define F 5
#define G 6
#define H 7
#define I 8
#define J 9
#define K 10
#define L 11
#define M 12
#define S1 0
#define S2 1
#define S3 2
#define S4 3
#define S5 4
#define S6 5
#define THREAD1 0
#define THREAD2 1
#define THREAD3 2
#define THREAD4 3
//Организация макроподстановки для вывода состояний тредов
//в ListBox с помощью функции SendDlgItemMessage
#define addstr(str) SendDlgItemMessage(hMainDlg, IDC_LISTING, LB_ADDSTRING, 0, (LPARAM)#str); SendDlgItemMessage(hMainDlg, IDC_LISTING, LB_SETTOPINDEX, SendDlgItemMessage(hMainDlg, IDC_LISTING, LB_GETCOUNT, 0, 0) - 1, 0);
void Thread1();
void Thread2();
void Thread3();
void Thread4();
#endif
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.10.2019, 21:23
Ответы с готовыми решениями:

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

Разработать программу для вычисления математического выражения
Разработать программу для вычисления математического выражения: Все переменные и результат имеют вещественный тип.

Составить программу для вычисления заданного математического выражения на основе реализации указанной функции
Хелп пж 1. Составить программу для вычисления заданного математического выражения на основе реализации указанной функции Это для:...

3
фрилансер
 Аватар для Алексей1153
6449 / 5643 / 1129
Регистрация: 11.10.2019
Сообщений: 15,022
14.10.2019, 21:35
Цитата Сообщение от kiyko_vl Посмотреть сообщение
resource.h нет смысла выкладывать
ну да, кто-то будет придумывать обратно идентификаторы контролов, чтобы разобраться в твоей программе )
Прикрепляй проект
1
0 / 0 / 0
Регистрация: 14.10.2019
Сообщений: 7
14.10.2019, 23:10  [ТС]
я не нашел информации как прикрепить проект, папка с проектом в зип архиве слишком тяжелая.
если нужен resource.h, то вот

//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by multithread_app.rc
//
#define IDD_MAINDLG 101
#define IDC_EDIT1 1012
#define IDC_EDIT2 1013
#define IDC_EDIT3 1014
#define IDC_EDIT4 1015
#define IDC_EDIT5 1016
#define IDC_EDIT6 1017
#define IDC_EDIT7 1018
#define IDC_EDIT8 1019
#define IDC_EDIT9 1020
#define IDC_EDIT10 1021
#define IDC_EDIT11 1022
#define IDC_EDIT12 1023
#define IDC_EDIT13 1024
#define IDC_LISTING 1025
#define IDC_START 1026
#define IDC_TERMINATE 1027

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 103
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1011
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
0
фрилансер
 Аватар для Алексей1153
6449 / 5643 / 1129
Регистрация: 11.10.2019
Сообщений: 15,022
15.10.2019, 07:35
kiyko_vl, удали из проекта папки debug,release, файл *.ncb , тозда зазипуется компактно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.10.2019, 07:35
Помогаю со студенческими работами здесь

Составить программу для вычисления заданного математического выражения на основе реализации указанной функции
Составить программу для вычисления заданного математического выражения на основе реализации указанной функции. Выражение: ...

Напишите программу вычисления математического выражения
Напишите программу вычесления математического выражения: a^2*b-(12+b*c)/(c^2*d) Буду благодарен.

Функция вычисления таблицы значений математического выражения
Задание к лабораторной работе 1. Составить алгоритм и реализовать функцию вычисления таблицы значений математического выражения в...

Вывести в файл фамилию, имя и отчество исполнителя и результат вычисления математического выражения
Нужно написать программу в паскале, которая вводит фамилию имя и отчество и анализирует из текстового файла input.txt один рядок-...

Цикл: Написать программу вычисления математического выражения использовав три типа циклов...
Написать программу вычисления математического выражения использовав три типа циклов (с счетчиком, с условием, с постусловием). Значение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru