Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Code preload moveable discardable

Поиск

DATA PRELOAD SINGLE

EXPORTS

;имена DLL функций

Построение файла TEST.DLL.. После создания файлов Test.cpp и Test.def нужно выбрать опцию Build в меню Build. В ответ Visual C++ создаст Test.dll.

Объявление глобальных переменных. Код, который загружает и использует TEST.Dll обращается к глобальным переменным, которые следует объявить в файле реализации диалога (TestDlg.cpp) приложения после строк:

#endif

// объявление переменной для хранения дескриптора DLL и ее //инициализация

HINSTANCE gLidTestDLL=NULL;

//объявление функций библиотеки DLL

Загрузка Test.dll. Перед вызовом функций библиотеки DLL необходимо загрузить библиотеку DLL в программе, использующей Test.dll. Обычно она загружается автоматически. Для этого код, загружающий DLL, нужно связать со входной точкой программы, например, с функцией элемента OnInitDialog() класса CProgramDlg. Для корректной работы программы необходимо вставить код проверки загрузки библиотеки DLL.

Загружается библиотека DLL функцией LoadLibrary(«Test.dll»).

5.2.Требования к программе:

Написать программу, реализующую DLL модуль для явной компоновки в режимах:

· автоматической загрузки DLL;

· загрузки DLL с помощью управляющего элемента.

В модуле DLL реализовать две функции:

· одна выводит текст в окно редактирования №1,

· вторая - в окно редактирования №2.

Эти функции должны запускаться с помощью стандартных управляющих элементов.

Отчет должен содержать: постановку задачи, листинг кода всех модифицированных функций и их назначение.

Варианты заданий

5.4.Контрольные вопросы

1. Динамически подключаемые библиотеки.

2. Явная и неявная компоновка модулей DLL.

3. Этапы создания проекта модуля DLL

4. Написание служебного кода модуля DLL

5. Основные файлы проекта модуля. DLL

6. Объявление глобальных переменных функций модуля DLL в приложениях

7. Автоматическая загрузка библиотеки DLL в приложении.

Что нужно сделать, чтобы другие пользователи могли пользоваться Вашим DLL файлом?

 

Лабораторная работа №6

Функции и свойства потоков и процессов в WIN32

Цель работы: изучить механизм создания потоков в Win32-разрядных приложениях.

Теоретические сведения

Многозадачность – возможность выполнять одновременно несколько задач (процессов) или запускать выполнение других процессов в фоновом режиме.

Процесс – это функциональное понятие. Процесс в операционной системе – это единица работы, рассматриваемая в динамике.

Процесс – это систематизированная последовательность операций, направленных на получение конкретного результата. С помощью процессов управляются ресурсы (устройства ввода/вывода, память), необходимые для выполнения задания.

Процессы не появляются спонтанно, а создаются двумя способами.

Существует пять основных состояний процессов (табл.6.1.).

Табл.6.1

Состояние Смысл
1. Выполняемый Процесс готов к выполнению
2. Ожидающий Процесс ждёт выделения какого-либо ресурса
3. Свопированный Процесс отсутствует в памяти
4. ЗОМБИ Процесс готов к уничтожению
5. Остановленный Процесс приостановлен, т.е. не имеет разрешения на выполнение

.

При управлении процессами должны быть реализована ВОЗМОЖНОСТЬ:

· передачи команды управления процессами;

· изменения приоритета выполнения процессов;

· текущего контроля (анализа) состояния процессов;

· защиты фоновых процессов;

· поиска «заблудших» процессов и их уничтожение (т.е. управление «ЗОМБИ»).

Процесс состоит из потоков. При инициализации процесса система создает всегда первичный поток. Поток определяет последовательность исполнения кода в процессе.

В то время как приложение предназначено для выполнения всей задачи, поток – это мини-программа, принадлежащая приложению и выполняющая частную задачу. При параллельном выполнении потоков и процессов могут возникнуть проблемы с доступом к разделяемым ресурсам. Чтобы избежать подобных конфликтов, в Windows предусмотрены средства синхронизации потоков.

Основные функции WIN32 API для работы с потоками. Функция создания потока CreateThread:

HANDLE CreateThread (

LPSECURITY_ATTRIBUTES lpThreadAttributes, // указатель на атрибуты защиты нового потока SECURITY_ATTRIBUTES;

DWORD dwStackSize,// размер стека, выделяемого потоку; если размер равен нулю, то поток будет иметь стек такого же размера, как и породивший его поток;

LPTHREAD_START_ROUTINE lpStartAddress, // адрес функции потока, с которой должен начать работу создаваемый поток; эта функция потока должна иметь следующий прототип:

DWORD WINAPI ThreadFunc(LPVOID lpParameter);

LPVOID lpParameter, // 32 – битный параметр (или 32-битный указатель), который передает функции потока какое-либо инициализирующее значение;

DWORD dwCreationFlags, // Если этот аргумент равен нулю, то выполнение этого потока начнется немедленно. Если этот аргумент будет равен CREATE_SUSPENDED, то начало выполнения потока будет задержано до определенных событий(например, до вызова функции ResumeThread();

LPDWORD lpThreadId // адрес идентификатора созданного потока.

);.

Если функция завершилась без ошибок, она возвращает значение вновь созданного описателя, иначе значение функции равно NULL.

Функция изменения относительного приоритета потока в пределах одного процесса:



Поделиться:


Последнее изменение этой страницы: 2016-04-26; просмотров: 305; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.188.211.246 (0.007 с.)