Советы по Delphi


Потоки и DLL - часть 3


/p>

Приведенный здесь код делится на три секции. В первой декларируется MyFunc, являющаяся простой реализацией функции в DLL. ThreadFunc сама располагается в отдельном потоке, создаваемом программой. Процедура UseThreadClick создает поток. Сразу после создания потока система вызывет процедуру ThreadFunc.

Вот декларация CreateThread:

var
DWORD = Integer;
function CreateThread(lpThreadAttributes: Pointer; // атрибуты безопасности потокаdwStackSize: DWORD; // размер стека для потокаlpStartAddress: TFNThreadStartRoutine; // функция потокаlpParameter: Pointer; // аргумент для нового потока dwCreationFlags: DWORD; // флаги созданияvar lpThreadId: DWORD): // Возвращаемый идентификатор потокаTHandle; // Возвращаемый дескриптор потока

В нормальной ситуации большинство параметров, передаваемых CreateThread, могут быть установлены в 0 или nil. Показан типичный пример вызова данной функции, но во многих случаях использование lpParameter неоправданно тяжело. Разумеется, любые переменные, установленные в данном параметре, передаются ThreadFunc в виде единственного аргумента.

Фактически, реализация функции потока очень проста, происходит вызов DLL и показывается информационный диалог, демонстрирующий строку, возвращаемую DLL.

Если вы создали программу с потоковой функцией как было показано выше, и создали DLL с функцией DLLEntryPoint, тоже показанной выше, то можно получить визуальное подтверждение того, как работает функция DLLEntryPoint. Поясняю: когда ваша программа загружается в память, DLL также должна быть автоматически загружена, тем самым вызывая MessageBox с текстом `Процесс подключен'. Диалоги появляются в зависимости от причины (Reason) вызова функции DllEntryPoint:

procedure DLLEntryPoint(Reason: DWORD);begincase Reason ofDll_Process_Attach:MessageBox(DLLHandle, 'Процесс подключен', 'Инфо', mb_Ok);Dll_Thread_Attach:MessageBox(DLLHandle, 'Поток подключен', 'Инфо', mb_Ok);Dll_Thread_Detach:MessageBox(DLLHandle, 'Поток отключен', 'Инфо', mb_Ok);Dll_Process_Detach:MessageBox(DLLHandle, 'Процесс отключен', 'Инфо', mb_Ok);end; // caseend;

Если вы создали процедуру ThreadFunc, показанную выше, то должно появиться диалоговое окно (MessageBox) с надписью "Поток подключен". При завершении работы подпрограммы ThreadFunc появится окошко с надписью "Поток отключен". Наконец, при закрытии программы должна появиться надпись "Процесс отключен". Пример, демонстрирующий процесс, доступен в сети.

Довольно сложно иллюстрировать технические возможности Delphi. Не все программисты Delphi захотят так глубоко вникать в дебри Windows API. Тем не менее, те, которые хотят воспользоваться мощью Windows 95 и Windows NT на полную катушку, могут видеть, что все современные технологии доступны всем без исключения программистам на Delphi. Приведенный выше пример доступен в Compuserve в виде файла DLLENT.ZIP и также размещен на Интернет-сервере Borland по адресу .

- Charles Calvert [000886]




Начало  Назад  Вперед



Книжный магазин