while not l_dataset do begin
l_filename := l_dataset..FieldByName('_LOCALNAME').AsString;
l_model.vrLoadModel(l_filename ,nil,(OPEN_FULL_STR_SERVER or FILES_EXTRACT));
l_dataset.next;
end;
Прекратить исполнение внешней процедуры
В своей программе я подключаюсь к другому приложению и вызываю одну из его функций, это дело происходит в цикле.
Код:
l_model.vrLoadModel(l_filename ,nil,(OPEN_FULL_STR_SERVER or FILES_EXTRACT));
вот эта процедура иногда зависает
Возможно ли при условии если исполняется процедура дольше 60 секунд прекратить исполнение процедуры и продолжить цикл?
Можно выделить вызов в отдельный поток, но если не знать его подноготной это может быть чревато.
Код:
var
Context: TContext;
begin
// Этот код выполняется в главном потоке (например, Button1Click)
Context := EnterWorkerThread;
try
{ Этот код выполняется во вторичном потоке }
{ Хотя это код Button1Click, но он выполняется, как если бы он был }
{ помещён в TThread.Execute. }
finally
LeaveWorkerThread(Context);
// После вызова LeaveWorkerThread переменная Context недействительна.
end;
// Этот код выполняется в главном потоке
Context: TContext;
begin
// Этот код выполняется в главном потоке (например, Button1Click)
Context := EnterWorkerThread;
try
{ Этот код выполняется во вторичном потоке }
{ Хотя это код Button1Click, но он выполняется, как если бы он был }
{ помещён в TThread.Execute. }
finally
LeaveWorkerThread(Context);
// После вызова LeaveWorkerThread переменная Context недействительна.
end;
// Этот код выполняется в главном потоке
То есть как я понял делать надо вот так
Код:
while not l_dataset.eof do begin
l_filename := l_dataset..FieldByName('_LOCALNAME').AsString;
Context := EnterWorkerThread;
try
l_model.vrLoadModel(l_filename ,nil,(OPEN_FULL_STR_SERVER or FILES_EXTRACT));
finally
LeaveWorkerThread(Context);
end;
sleep(60000);//Ждем минутку
//..............
//и вот тут необходимо как то проверить, выполнилась ли процедура или нет
//..............
l_dataset.next;
end;
l_filename := l_dataset..FieldByName('_LOCALNAME').AsString;
Context := EnterWorkerThread;
try
l_model.vrLoadModel(l_filename ,nil,(OPEN_FULL_STR_SERVER or FILES_EXTRACT));
finally
LeaveWorkerThread(Context);
end;
sleep(60000);//Ждем минутку
//..............
//и вот тут необходимо как то проверить, выполнилась ли процедура или нет
//..............
l_dataset.next;
end;