Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];

Вниз

как исключить ошибку   Найти похожие ветки 

 
snowkam ©   (2005-10-26 04:06) [0]

Привет! Подскажите как это побороть.
В программе запускается некая процедура. Которая в большенстве случаев отрабытывается нормально. Но иногда приводит к зависанию приложения. Как сделать так чтобы это исключить. Может по таймауту??? не знаю подскажите пож......


 
Джо ©   (2005-10-26 04:31) [1]


>  Как сделать так чтобы это исключить

Написать эту "некую процедуру" так, чтобы она не приводил к таким эффектам, как "зависание приложения".


 
snowkam ©   (2005-10-26 07:51) [2]

так в этом вся и фишка. Не могу понять где возникает ошибка. Все тестировал все проверял все работает. Но иногда просто процедура зависает вернее зависает на процедуре и все.


 
clickmaker ©   (2005-10-26 10:01) [3]


> snowkam ©   (26.10.05 07:51) [2]

заинтриговал. мож покажешь эту загадочную процедуру?


 
snowkam1   (2005-10-27 00:10) [4]

procedure TForm1.RunDosInMemo(CmdLine: string);
const
 ReadBuffer = 2400;
var
 Security: TSecurityAttributes;
 ReadPipe, WritePipe: THandle;
 start: TStartUpInfo;
 ProcessInfo: TProcessInformation;
 Buffer: Pchar;
 BytesRead: DWord;
 Apprunning: DWord;
begin
 with Security do
 begin
   nlength := SizeOf(TSecurityAttributes);
   binherithandle := true;
   lpsecuritydescriptor := nil;
 end;
 if Createpipe(ReadPipe, WritePipe,
   @Security, 0) then
 begin
   Buffer := AllocMem(ReadBuffer + 1);
   FillChar(Start, Sizeof(Start), #0);
   start.cb := SizeOf(start);
   start.hStdOutput := WritePipe;
   start.hStdInput := ReadPipe;
   start.dwFlags := STARTF_USESTDHANDLES +
     STARTF_USESHOWWINDOW;
   start.wShowWindow := SW_HIDE;

   if CreateProcess(nil,
     PChar(CmdLine),
     @Security,
     @Security,
     true,
     NORMAL_PRIORITY_CLASS,
     nil,
     nil,
     start,
     ProcessInfo) then
   begin
     repeat
       Apprunning := WaitForSingleObject
         (ProcessInfo.hProcess, 100);
       ReadFile(ReadPipe, Buffer[0],
         ReadBuffer, BytesRead, nil);
       Buffer[BytesRead] := #0;
       OemToAnsi(Buffer, Buffer);
       fin_str:= string(Buffer);
       Application.ProcessMessages;
       until (fin_str<> "");
   end;
   FreeMem(Buffer);
   CloseHandle(ProcessInfo.hProcess);
   CloseHandle(ProcessInfo.hThread);
   CloseHandle(ReadPipe);
   CloseHandle(WritePipe);
 end;
 stat_str:= Copy(fin_str,1, AnsiPos(" ", fin_str));
 info_str:= Copy(fin_str, AnsiPos(" ", fin_str) + 1, Length(fin_str));
 logm.Insert;
 logm.FieldByName("data").Value:= date;
 logm.FieldByName("time").Value:= time;
 logm.FieldByName("sysnom").Value:= serv.FieldByName("sysnom").Value;
 logm.FieldByName("stat").Value:= stat_str;
 logm.FieldByName("rez").Value:= Trim(info_str);
 logm.FieldByName("modul").Value:= moduls.FieldByName("mod").Value;
 logm.Post;
end;

И что характерно процедура спокойно работает всю ночь. Тоесть вызывается при определенном исключении и работает нормально. Зависание происходит обычно тогда когда я чтолибо делаю на машине тоесть работаю!


 
Kolan ©   (2005-10-27 01:25) [5]

Можно писать лог, увидишь где остановился.


 
Digitman ©   (2005-10-27 09:34) [6]


> snowkam ©   (26.10.05 04:06)


дщля начала заведи себе привычку не игнорировать результаты выполнения вызываемых тобой WinAPI-ф-ций, а получив их прежде всего анализировать успешность выполнения.

та же самая WaitForSingleObject() может вернуть совершенно разные результаты, в зависимости от состояния интересующего объекта синхронизации и таймаута .. только проанализировав, ЧТО реально вернула ф-ция, можно принимать дальнейшее решение о том читать ли из пайпа или делать что-то иное ... да и само чтение из пайпа может вернуть True или False, и в зависимости от этого следует принимать соотв. алгоритм. решения



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

Форум: "Начинающим";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.041 c
14-1130070333
@BraIN
2005-10-23 16:25
2005.11.13
Программа для измерения температуры процессора


4-1126641620
Nick Denry
2005-09-14 00:00
2005.11.13
Требуется создать ListBox


3-1128329817
Ярослав
2005-10-03 12:56
2005.11.13
Как правильно организовать частые добавления в БД


3-1127007130
Fedia
2005-09-18 05:32
2005.11.13
Использование не DB компонента на DBCtrlGrid.


9-1120114310
Мелкий
2005-06-30 10:51
2005.11.13
Проблемка с трансформацией меша в DirectX





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский