|
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
|
|
| 14.10.2019, 21:23 | |
|
Ответы с готовыми решениями:
3
|
|
фрилансер
6449 / 5643 / 1129
Регистрация: 11.10.2019
Сообщений: 15,022
|
||
| 14.10.2019, 21:35 | ||
|
Прикрепляй проект
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
|
|
|
фрилансер
6449 / 5643 / 1129
Регистрация: 11.10.2019
Сообщений: 15,022
|
|
| 15.10.2019, 07:35 | |
|
kiyko_vl, удали из проекта папки debug,release, файл *.ncb , тозда зазипуется компактно
0
|
|
| 15.10.2019, 07:35 | |
|
Помогаю со студенческими работами здесь
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 законам Кирхгофа и. . .
|