Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.01.27;
Скачать: CL | DM;

Вниз

Возможно-ли прервать функцию из dll   Найти похожие ветки 

 
AbrosimovA ©   (2007-06-23 15:14) [0]

Возможно-ли прервать выполнение функций или процедур, вызываемых из dll, если время их работы превышает заданное и как это оформить в коде?

Например, при вызове функции recvfrom из WS2_32.DLL, она выполняется неопределённо долго и моё приложение как-бы подвисает.


 
Dib@zol   (2007-06-23 15:19) [1]

Попробуй реализовать вызов подпрограммы из Вел. и Уж. Мультимедийного Таймера. По истечении отпущенного ему кванта времени проц обрубает его поток вместе со всем что он там выполняет. Юнит MMSystem, TimeSetEvent+TimeKillEvent. Ща у себя пороюсь, мож кину екзампл.


 
Инс ©   (2007-06-23 15:31) [2]


> Например, при вызове функции recvfrom из WS2_32.DLL, она
> выполняется неопределённо долго и моё приложение как-бы
> подвисает


Может просто использовать неблокирующие сокеты?


 
Dib@zol   (2007-06-23 15:40) [3]

Вот. Даже юнит подключать без надобности.

type
 TMR_CALLBACK = procedure(uTimerID, uMessage: UINT; dwUser, dw1, dw2: DWORD); stdcall;

const
 WinMM = "WinMM.dll";
 TIME_ONESHOT = 0;

var
 T : UINT;

...

function timeSetEvent(uDelay, uResolution: UINT; lpFunction: TMR_CALLBACK; dwUser: DWORD; uFlags: UINT): UINT; stdcall; external WinMM;
//function timeKillEvent(uTimerID: UINT): UINT; stdcall; external WinMM;

...

function RunProcedure(Delay:Word);
// ------------------------------------------------------- \\
procedure _TMR(utimerId, uMessage:uint; dwUser, dw1, dw2 : dword) stdcall;
begin
<Вызов_твоей_процедуры>
end;
// ------------------------------------------------------- \\
begin                                    
result:=timeSetEvent(Delay, Delay, @_TMR, 0, TIME_ONESHOT);
end;

Если компилятор будет ругаться, что в подпроцедуре есть директива STDCALL, просто вынь её из основной.

ЗЫ: При TIME_ONESHOT таймер отрубается на автопилоте, и по-моему вызывать timeKillEvent без надобности. Впрочем точно я не помню, глянь справку.


 
Dib@zol   (2007-06-23 15:41) [4]


> Может просто использовать неблокирующие сокеты?


У меня проще!


 
Инс ©   (2007-06-23 16:46) [5]


> У меня проще!


Только не правильно ;) Автор задал неправильный вопрос, а вы на него дали ответ "в лоб", не задумываясь, как нужно поступить в этой ситуации на самом деле.

AbrosimovA
Сходите по этой ссылке:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1021#08


 
Dib@zol   (2007-06-23 16:52) [6]


> Только не правильно ;)


Да ладно уж...

// var T:UINT;

function RunProcedure(Delay:Word):UINT;

Так лучше? :)


 
AbrosimovA ©   (2007-06-23 17:04) [7]

Большое спасибо Dib@zol.



Страницы: 1 вся ветка

Текущий архив: 2008.01.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
15-1197987450
ПЛОВ
2007-12-18 17:17
2008.01.27
Учет техники на предприятии (в електронном виде)


2-1198780216
art36
2007-12-27 21:30
2008.01.27
Мастера! Скажите, как загрузить иконку сайта?


2-1198864791
OpTiKaL
2007-12-28 20:59
2008.01.27
Файлы!


2-1198847106
paul
2007-12-28 16:05
2008.01.27
FindKey


3-1190023403
Цукор5
2007-09-17 14:03
2008.01.27
ползунок в TDBGrid