Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Int lstrlen(LPCTSTR lpString)↑ ⇐ ПредыдущаяСтр 5 из 5 Содержание книги Поиск на нашем сайте
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; просмотров: 453; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.133.126.241 (0.008 с.) |