Главная страница
Навигация по странице:

  • Изучаемые вопросы

  • Постановка задачи

  • Теоретические сведения Структура COPYDATASTRUCT

  • Передача текстовой информации

  • Прием текстовой информации

  • Передача структурированной информации

  • Прием структурированной информации.

  • ПРИЛОЖЕНИЕ Варианты заданий лабораторной работы № 5

  • Варианты заданий лабораторной работы № 6

  • Системное_программирование. Практикум для студентов специальностей 140 01 02 Информационные системы и технологии


    Скачать 1.66 Mb.
    НазваниеПрактикум для студентов специальностей 140 01 02 Информационные системы и технологии
    Дата02.09.2020
    Размер1.66 Mb.
    Формат файлаpdf
    Имя файлаСистемное_программирование.pdf
    ТипПрактикум
    #136562
    страница6 из 6
    1   2   3   4   5   6
    Лабораторная работа № 9
    МЕЖПРОЦЕССОРНОЕ ВЗАИМОДЕЙСТВИЕ
    Цель работы: изучить основы передачи между процессами ин- формации на базе сообщения WM_COPYDATA
    Изучаемые вопросы
    1.
    Структура COPYDATASTRUCT.
    2.
    Передача текстовой информации.
    3.
    Прием текстовой информации.
    4.
    Передача структурированной информации.
    5.
    Прием структурированной информации.
    Постановка задачи
    Создать приложение, состоящее из двух процессов:
    − первый процесс посылает текстовую и структурированную информацию;
    − второй процесс принимает информацию и отображает её в окне процесса.
    Теоретические сведения
    Структура COPYDATASTRUCT
    Структура COPYDATASTRUCT содержит данные, которые бу- дут переданы в другую прикладную программу в соответствии с сообщением WM_COPYDATA.
    Синтаксис: typedef struct tagCOPYDATASTRUCT
    {
    DWORD dwData;
    DWORD cbData;
    PVOID lpData;
    } где: dwData – устанавливает до 32 битов данных, которые будут пе- реданы в принимающую прикладную программу;

    69 cbData – устанавливает размер, в байтах, данных, указанных элементом структуры lpData; lpData – указывает на данные, которые будут переданы в прини- мающую прикладную программу. Этот элемент структуры может быть значением ПУСТО (NULL).
    Сообщение WM_COPYDATA передается тогда, когда одна про- грамма пересылает данные в другую программу.
    Синтаксис:
    WM_COPYDATA wParam = (WPARAM) (HWND) hwnd;// дескриптор передающего окна lParam = (LPARAM) (PCOPYDATASTRUCT) pcds;
    // указатель на структуру с данными
    Параметры: hwnd – идентифицирует окно, которое передает данные; pcds – указывает на структуру COPYDATASTRUCT, которая со- держит данные для передачи.
    Если принимающая программа обрабатывает это сообщение, она должна возвратить значение ИСТИНА (TRUE); в противном случае она должна возвратить – ЛОЖЬ (FALSE).
    Для передачи этого сообщения программа должна использовать функцию SendMessage. Данные, предназначенные для передачи, не должны содержать указателей или других ссылок на объекты, не доступные для программы, принимающей эти данные.
    До тех пор, пока это сообщение действует, вызванные данные не должны быть изменены другим потоком процесса пересылки. При- нимающая программа должна принимать во внимание данные толь- ко для чтения. Параметр pcds правилен только в течение обработки сообщения. Принимающая программа не должна освобождать па- мять, вызванную pcds. Если принимающая программа обратилась к данным после возврата значения функцией SendMessage, она долж- но копировать данные в локальный буфер.
    Передача текстовой информации
    При передаче текстовой информации подготавливается строка, которая отправляется в выбранное окно (находимое

    70 функцией FindWindow) функцией SendMessage с параметром
    WM_COPYDATA:
    SetDlgItemText(hDlg,IDC_EDIT_TEXT,L"
    Разоренов Николай");
    HWND hWnd1 = FindWindowA(NULL,"2"); cds.dwData = MYMEM; cds.cbData = 50; char n1[50]; n1[0] = 0;
    GetDlgItemTextA(hDlg,IDC_EDIT_TEXT,n1,sizeof(n1)*2); cds.lpData = n1; if (hWnd1 != NULL)
    SendMessage(hWnd1, WM_COPYDATA, (WPARAM)(HWND) hDlg,
    (LPARAM) (LPVOID) &cds);
    Прием текстовой информации
    При получении текстовой информации во втором процессе про- веряется, не было ли использовано WM_COPYDATA. При пра- вильном заполнении структуры COPYDATASTRUCT происходит примерно следующее: case WM_COPYDATA:
    { pcds = (PCOPYDATASTRUCT) lParam; switch( pcds->dwData )
    { case MYMEM:
    {
    SetDlgItemTextA(hDlg,IDC_EDIT_TEXT,(CHAR *)pcds->lpData); break;
    }
    Передача структурированной информации
    Передача структурированной информации отличается от переда- чи строки тем, что в параметр lpData структуры
    COPYDATASTRUCT помещается структура с данными:
    HWND hWnd1 = FindWindowA(NULL,"2");
    BMPStruct.biSize
    = BmpInfoHeader->biSize ;
    BMPStruct.biWidth = BmpInfoHeader->biWidth;

    71
    BMPStruct.biHeight = BmpInfoHeader->biHeight ;
    BMPStruct.biBitCount = BmpInfoHeader->biBitCount ;
    BMPStruct.biClrUsed = BmpInfoHeader->biClrUsed ; cds.dwData = MYSTRUCT;
    //устанавливает до 32 битов данные, которые будут переданы cds.cbData = sizeof(BITMAPFH_STRUCT);
    //размер данных cds.lpData = &BMPStruct;
    //данные, которые будут переданы if (hWnd1 != NULL)
    SendMessage(hWnd1, WM_COPYDATA, (WPARAM)(HWND) hDlg,
    (LPARAM) (LPVOID) &cds);
    Прием структурированной информации.
    При приеме структурированной информации из параметра lpData извлекается переданная структура и происходит (в нашем случае) вывод полученной информации на экран: case MYSTRUCT:
    { char *sBuf;
    DWORD n;
    BMPStruct = (BITMAPFH_STRUCT *) pcds->lpData; n = (DWORD) &BMPStruct->biSize;
    SetDlgItemInt(hDlg,IDC_EDIT2,n,FALSE); n = (DWORD) BMPStruct->biWidth;
    SetDlgItemInt(hDlg,IDC_EDIT3,n,FALSE); n = (DWORD) BMPStruct->biHeight;
    SetDlgItemInt(hDlg,IDC_EDIT4,n,FALSE); n = (DWORD) BMPStruct->biBitCount;
    SetDlgItemInt(hDlg,IDC_EDIT1,n,FALSE); n = (DWORD) BMPStruct->biClrUsed;
    SetDlgItemInt(hDlg,IDC_EDIT5,n,FALSE); break;
    }

    72
    Литература
    1.
    Рихтер, Дж. Windows для профессионалов: создание эффек- тивных Win32 приложений с учетом специфики 64-разрядной вер- сии Windows / Дж. Рихтер; пер. с англ. – 4-е изд. – СПб.: Питер, М.:
    Издательско-торговый дом «Русская редакция», 2001. – 752 с.
    2.
    Шилдт, Г. Полный справочник по C++ / Г. Шилдт. – 4-е изд. –
    М.: Вильямс, 2006. – 796 с.
    3.
    Петзолд, Ч. Программирование для Windows 95: в 2 т. / Ч. Пет- золд; пер. с англ. – СПб.: BHV – Санкт-Петербург, 1997. – Т. 2. – 368 с.
    4.
    Гордеев, А.В. Системное программное обеспечение / А.В. Гор- деев, А.Ю. Молчанов. – СПб.: Питер, 2003. – 736 с.
    5.
    Румянцев, П.В. Азбука программирования в WIN32 API / П.В. Ру- мянцев. – СПб.: Питер, 2004. – 310 с.
    6.
    Разработка приложений на Microsoft Visual C++ 6.0. Учебный кур: Официальное пособие Microsoft для самостоятельной подго- товки / пер. с англ. – М.: Издательско-торговый дом «Русская Ре- дакция», 2000. – 576 с.
    9.
    Джонсон, М. Харт. Системное программирование в среде
    Windows
    / М. Харт Джонсон. – М.: Издательский дом «Вильямс»,
    2001. –
    464 с.
    10.
    Рихтер, Дж. Программирование серверных приложений для
    Microsoft Windows
    2000. Мастер-класс. / Дж. Рихтер, Дж. Д. Кларк: пер. с англ. – СПб.: Питер, М.: Издательско-торговый дом «Русская редакция», 2001. – 592 с.

    73
    ПРИЛОЖЕНИЕ
    Варианты заданий лабораторной работы № 5

    Си- стема коор- динат
    Рисунок
    Пояснения
    1
    L
    OE
    NGL
    IS
    H
    Рисунок нарисованный сплошной черной линией (
    ) появляется на экране при запуске программы, нарисо- ванный пунктирной линией
    (
    ) появляется через ∆t1 и является зеркальным отражением началь- ного рисунка.
    По направлению указанному стрелками выводится вводимый с клавиа- туры текст.
    2
    H
    IM
    E
    T
    RIC
    На экране по трем точкам (координатам курсора мыши при щелчке) рисуется тре- угольник. Его размеры изменяются как показано на рисунке при «оттягивании» одного из его углов мышью.
    По направлению указанному стрелками выводится вводимый с клавиа- туры текст.
    3
    L
    OE
    NGL
    IS
    H
    На экране по двум точкам (координатам курсора мыши при щелчке) рисуется пря- моугольник. Его размеры изменяются как показано на рисунке при «оттягивании» нижнего правого угла мышью.
    По направлению указанному стрелками выводится вводимый с клавиа- туры текст.
    4
    T
    WI
    P
    S
    На экране нарисовать данную фигуру.
    По направлению указанному стрелками выводится вводимый с клавиа- туры текст.

    74

    Си- стема коор- динат
    Рисунок
    Пояснения
    5
    L
    O
    M
    E
    T
    R
    IC
    На экране нарисовать данную фигуру.
    По направлению указанному стрелками выводится вводимый с клавиа- туры текст.
    6
    ANI
    S
    OT
    R
    O
    P
    IC
    На экране нарисовать данную фигуру.
    По направлению указанному стрелками выводится вводимый с клавиа- туры текст.
    7
    IS
    O
    T
    RO
    P
    IC
    На экране нарисовать данную фигуру.
    По направлению указанному стрелками выводится вводимый с клавиа- туры текст.
    8
    L
    OE
    NGL
    IS
    H
    На экране нарисовать данную фигуру.
    По направлению указанному стрелками выводится вводимый с клавиа- туры текст.
    9
    H
    IM
    E
    T
    RIC
    На экране нарисовать данную фигуру.
    По направлению указанному стрелками выводится вводимый с клавиа- туры текст.
    10
    L
    OE
    NGL
    IS
    H
    На экране нарисовать данную фигуру.
    По направлению указанному стрелками выводится вводимый с клавиа- туры текст.

    75

    Си- стема коор- динат
    Рисунок
    Пояснения
    11
    T
    WI
    P
    S
    На экране нарисовать данную фигуру.
    По направлению указанному стрелками выводится вводимый с клавиа- туры текст.
    По щелку мыши текст начинает выводиться с другой стороны от вертикальной оси.
    12
    L
    O
    M
    E
    T
    R
    IC
    На экране нарисовать данную фигуру.
    По направлению указанному стрелками выводится вводимый с кла- виатуры текст.
    13
    IS
    O
    T
    RO
    P
    IC
    На экране нарисовать данную фигуру.
    По направлению указанному стрелками выводится вводимый с кла- виатуры текст.
    14
    L
    OE
    NGL
    IS
    H
    На экране нарисовать карандаш. По щелч- ку мыши изменяется цвет стержня.
    По направлению указанному стрелками выводится вводимый с кла- виатуры текст.
    15
    H
    IM
    E
    T
    RIC
    На экране по двум точкам (координатам курсора мыши при щелчке) рисуется пря- моугольник. Его размеры изменяются, как показано на рисунке при «оттягивании» нижнего правого угла мышью.
    По направлению указанному стрелками выводится вводимый с кла- виатуры текст.

    76

    Си- стема коор- динат
    Рисунок
    Пояснения
    16
    L
    OE
    NGL
    IS
    H
    На экране нарисовать N прямоугольников высоты h
    1
    , h
    2
    , h
    3
    ,…
    Каждый прямоугольник имеет свою штриховку.
    Высота прямоугольника выводится над прямоугольником.
    17
    T1
    T2
    T3
    T4
    T1-...
    T2-...
    T3-...
    T4-...
    На экране изобразить диаграмму по зна- чениям Т1, Т2, Т3, Т4 вводимым с клавиа- туры.
    18
    ANI
    S
    OT
    R
    OP
    IC
    y x
    На экране изобразить график заданной функции.
    Сделать подписи к осям и над опущенны- ми на ось Х перпендикулярами указать значения функции при данном Х.
    19
    Написать игру «Крестики-нолики».
    По щелку левой кнопкой мыши в данной клеточке появляется крестик, правой — нолик.
    По окончании игры предусмотреть объяв- ление победителя.

    77
    Варианты заданий лабораторной работы № 6
    Фигуры, на которые на рисунке указывает курсор мыши , дви- гаются по экрану при нажатой левой клавиши мыши по траектории движения мыши.
    Переменные С1, С2, С3…и т.д. обозначают цвета фигур и участ- ков экрана. Если индексы в переменных разные, то и цвета должны быть разные.
    Вывод всех рисунков на экран осуществляется методом двойной буферизации.

    Рисунок
    Пояснения
    1
    По экрану по показанной траекто- рии двигается круг, изменяя свой радиус.
    2
    По экрану по показанной траекто- рии двигается круг, изменяя свой радиус и цвет.
    3
    C1
    C2
    C3
    На экране цвета С3 через ∆t1 по- является фигура цвета С2, а через
    ∆t
    2 фигура цвета С1.
    4
    C1
    C2
    C3
    C4
    C5
    C6
    Фигуры из каждого сектора экрана через ∆t1 после запуска програм- мы начинают двигаться вверх.

    78

    Рисунок
    Пояснения
    5
    Через ∆t1 после запуска програм- мы на экране получить данную картинку.
    6
    По экрану по показанной траекто- рии двигается круг, изменяя свой радиус и цвет.
    7
    В программе имитировать восход солнца.
    8
    В программе имитировать при- ближение автомобиля к плоскости экрана.
    9
    C1
    C2
    C3
    C4
    Фигуры появляются на экране друг за другом последовательно через ∆t1.

    79

    Рисунок
    Пояснения
    10
    C1
    C2
    C3
    На экране имитировать движение маятника.
    Левая кнопка мыши колебания начинаются, правая – заканчива- ются.
    11
    C1
    C
    2
    C
    3
    На экране имитировать движение маятника.
    Правая кнопка мыши колебания начинаются, левая – заканчиваются.
    12
    C1
    C2
    Фигура появляется на экране через
    ∆t1.
    13
    По траектории показанной на ри- сунке движется круг, изменяя свой цвет в зависимости от своего ме- стоположения.
    14
    C1
    C2
    C3
    На экране цвета С1 через ∆t1 по- является круг цвета С2, а через ∆t2 круг цвета С3, который начинает хаотично двигаться внутри друго- го круга.
    15
    C1
    C2
    C3
    C4
    Фигуры появляются на экране друг за другом последовательно через ∆t1.

    80

    Рисунок
    Пояснения
    16
    По экрану по показанной траекто- рии двигается эллипс, изменяя свой цвет.
    17
    По экрану по показанной траекто- рии двигается круг, изменяя свой радиус.
    18
    C 1
    C 2
    C 4
    C 1
    C 2
    C
    1
    C
    2
    C
    1
    C
    2
    C 3
    На экране получить разноцветную фигуру, по которой может дви- гаться круг.
    19
    На экране сымитировать мерцание звезд на ночном небе
    20
    На экране проиллюстрировать одновременное движение автомо- биля и полет воздушного шара в указанных направлениях. Предме- ты начинают движение по левому щелчку мыши.

    81
    Учебное издание
    СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ
    Лабораторный практикум для студентов специальностей 1-40 01 02
    «Информационные системы и технологии» и 1-40 01 01
    «Программное обеспечение информационных технологий»
    Составитель
    РАЗОРЁНОВ Николай Александрович
    Технический редактор О.В. Песенько
    Подписано в печать 20.02.2012.
    Формат 60×84 1
    /
    16
    . Бумага офсетная.
    Отпечатано на ризографе. Гарнитура Таймс.
    Усл. печ. л. 4,71. Уч.-изд. л. 3,68. Тираж 100. Заказ 1065.
    Издатель и полиграфическое исполнение:
    Белорусский национальный технический университет.
    ЛИ № 02330/0494349 от 16.03.2009.
    Проспект Независимости, 65. 220013, Минск.
    1   2   3   4   5   6


    написать администратору сайта