Форум: "WinAPI";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];
ВнизВозможно-ли прервать функцию из 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c