Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Int lstrlen(LPCTSTR lpString)Содержание книги Поиск на нашем сайте
lpString – указатель на строку
Приложение П3
//Директивой препроцессора подключаются //заголовочные файлы #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[20]; //Функцией addstr в ListBox выводится текст (см. //main.h) addstr(#1: Starting thread...); addstr(#1: a = a + b...); //Ассемблерная вставка, для подсчета суммы a //b __asm { mov eax, input_var[B] add input_var[A], eax } addstr(#1: Set event S12...); //Функция установки объекта события SetEvent(event_obj[S12]); addstr(#1: m = sqrt(m)...); input_var[M] = (DWORD)sqrt((double)input_var[M]); addstr(#1: l = l - m...); input_var[L] -= input_var[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) Продолжение прил. П3
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: { Продолжение прил. П3
//Цикл по принудительному //завершению //всех тредов (функция //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 = S12; a <= S41; a++) Окончание прил. П3
event_obj[a] = CreateEvent(NULL, false, false, NULL); //Функция создания диалогового окна DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_MAINDLG), 0, (DLGPROC)DlgProc, 0); return false; } Приложение П4 #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 S12 0 #define S13 1 #define S32 2 #define S24 3 #define S31 4 #define S41 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 Приложение П5 .model small .stack 20h; 6 bytes needed .data
A equ 24 B equ 22 C equ 20 D equ 18 E equ 16 F equ 14 G equ 12 H equ 10 I equ 8 J equ 6 K equ 4 L equ 2 M equ 0
in_string db 'Введите число A = $' in_array dw 13 dup (0) otvet db 13,10,'Ответ равен $' press_enter db 13,10,13,10,'Нажмите <Enter> для завершения...$'
.code entrypoint: mov ax,@data mov ds,ax mov cx,13 @1: xor si,si mov dx,offset in_string mov ah,9 int 21h @3: mov ah,8 int 21h cmp al,0Dh je @2 cmp al,'0' jb @3 cmp al,'9' ja @3 mov ah,2 mov dl,al int 21h Продолжение прил. П5
and dx,0FFh sub dx,'0' push dx test si,si je @4 pop ax pop dx add ax,dx pop dx jmp @end @4: mov ax,0Ah mul dx push ax inc si jmp @3 @2: test si,si je @3 pop ax pop ax @end: mov si,cx dec si shl si,1 mov in_array[si],ax mov dl,0Dh mov ah,02h int 21h mov dl,0Ah mov ah,02h int 21h inc byte ptr [offset in_string + 14] loop @1
mov ax,in_array[B] add in_array[A],ax
mov ax,in_array[D] add in_array[C],ax
mov ax,in_array[A] mul in_array[C]
mov cx,in_array[E] add cx,in_array[F] Продолжение прил. П5
add cx,in_array[G]
mul cx
push ax
mov ax,in_array[H] mul in_array[I] mul in_array[J]
pop cx sub cx,ax
push cx
fwait fild word ptr in_array[M] fsqrt fist word ptr in_array[M]
mov ax,in_array[L] sub ax,in_array[M]
mul in_array[K]
mov cx,ax xor dx,dx pop ax
div cx
xor si,si xor dx,dx mov cx,10 @loop: xor dx,dx div cx
add dx,'0' mov byte ptr in_string[si],dl inc si test ax,ax jne @loop @ok: mov dx,offset otvet Окончание прил. П5
mov ah,9 int 21h dec si @out: mov dl,in_string[si] mov ah,2 int 21h dec si jge @out
mov dx,offset press_enter mov ah,9 int 21h
@repeat: mov ah,8 int 21h cmp al,0Dh jne @repeat
mov ah,4ch int 21h
end entrypoint
Приложение П6
Продолжение прил. П6
Продолжение прил. П6
Продолжение прил. П6
Окончание прил. П6
БИБЛИОГРАФИЧЕСКИЙ СПИСОК 1. Ассемблер и Си: Учеб. пособ. для вузов / Лаврентьев С.М. – М.: Финансы и статистика, 2004. 2. Введение в операционные системы: Учеб. пособ. / Д.В. Иртегов. – СПб.: БВХ-Петербург, 2002. – 624 с.: ил. 3. Гордеев А.В. Операционные системы: Учебник для вузов. Изд. 2-е. – СПб.: Питер, 2004. – 416 с.: ил. 4. Олифер В.Г., Олифер Н.А. Сетевые операционные системы: Учебник для вузов. – СПб.: Питер, 2002. – 544 с.: ил. 5. Павловская Т.А. С/С++: Программирование на языке высокого уровня: Учебник для вузов. – СПб.: Питер, 2003. – 462 с.: ил. 6. Подбельский В.В., Фомин С.С. Программирование на языке Си: Учеб. пособие для вузов. Изд. 2-е, дополненное. – М.: Финансы и статистика, 2000. – 192с.: ил. 7. Столингс В. Операционные системы: внутреннее устройство и принципы проектирования/ Пер. с англ. Изд. 4-е. – М.: Издат. Дом «Вильямс», 2002. – 848 с.: ил. 8. Юров В.И. Assembler: Учебник для вузов. Изд. 2-е. – СПб.: Питер, 2004. – 637 с.: ил.
оглавление Введение ……………..…………………………………………...3 1. Содержание и объем курсовой работы ……………...…...4 2. Оформление курсовой работы. …...…………………...…..5 3. Распараллеливание обработки информации –
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Последнее изменение этой страницы: 2017-02-05; просмотров: 545; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.115 (0.009 с.) |