- •Министерство образования и науки российской федерации
- •«Самарский государственный технический университет»
- •Ю. В. Калмыков, а. В. Тараканов
- •Введение
- •1. Содержание и объем курсовой работы
- •2. Оформление курсовой работы
- •3. Распараллеливание обработки
- •4. Потоковая обработка информации
- •4.1. Организация потоковой обработки информации
- •4 14 .2. Построение программ коммутации
- •Программа коммутации
- •5. Организация параллельных
- •6. Пример создания мультипоточного
- •В качестве альтернативного способа достижения высокой скорости вычислений является написание программного кода на языке ассемблера.
- •7. Определение временных
- •Первоначально необходимо установить настройки среды программирования, как показано на рис. 7.1 – 7.3.
- •8. Порядок выполнения работы
- •9. Содержание расчетно-пояснительной
- •Сызрань 2010 Приложение п2
- •1) Функция изменения состояния синхронизирующего объекта события, устанавливающая его в состояние “Включено”.
- •Продолжение прил. П2
- •Продолжение прил. П2
- •Продолжение прил. П2
- •Окончание прил. П2
- •Продолжение прил. П3
- •Продолжение прил. П3
- •Продолжение прил. П3
- •Продолжение прил. П3
- •Продолжение прил. П3
- •Окончание прил. П3
- •Приложение п5
- •Продолжение прил. П5
- •Продолжение прил. П5
- •Окончание прил. П5
- •Приложение п6
- •Библиографический список
- •Оглавление
- •Системное программное обеспечение
- •443100, Г. Самара, ул. Молодогвардейская, 244. Главный корпус
- •446001, Г. Сызрань, ул. Советская, 45
Продолжение прил. П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)
