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

Вниз

Что за ошибка: EOSError ....   Найти похожие ветки 

 
Andy BitOff ©   (2005-11-18 13:10) [0]

При закрытии программы вываливается окошко с текстом:

Exception EOSError in module SomeEXE.exe at 0000F1DA.
System Error.  Code: 1400.
Heдoпycтимый дecкpиптop oкнa.


Подскажите в каком направлении копать.
Пока незнаю, что еще сказать, спрашивайте.


 
Leonid Troyanovsky ©   (2005-11-18 13:34) [1]


> Andy BitOff ©   (18.11.05 13:10)  

> Пока незнаю, что еще сказать, спрашивайте.


Что делается в OnDestroy.
Есть ли finalization, AddExitProc.
Есть ли threads, dll.

--
Regards, LVT.


 
GuAV ©   (2005-11-18 13:34) [2]

Это исключения поднимается из RaiseLastOSError, RaiseLastWin32Error, Win32Check. Исключение создаётся на основании кода ошибки GetLastError и соответсвующего ему текста.

В данном случае, судя по тексту исключения, в функцию WinAPI передаётся хендл несуществующего окна.


 
GuAV ©   (2005-11-18 13:35) [3]

Следует помнить, что хендлы окон VCL конторлов (иногда, но всё же) пересоздаются, поэтому плохая идея запоминать хендл окна.


 
Andy BitOff ©   (2005-11-18 13:58) [4]

Leonid Troyanovsky ©   (18.11.05 13:34) [1]

> Что делается в OnDestroy.
> Есть ли finalization, AddExitProc.
> Есть ли threads, dll.


OnDestroy, OnClose и иже с ними не обрабатываются.
finalization и AddExitProc, тоже нет.
DLL - нет.
Thread создается один, в нем выполняется запрос к Oracle. Все проходит удачно. Для отображения использую ExpressQuantumGrid 5 в нем возникает глюк, не отображаются полосы прокрутки. Если на врямя работы Thread сделать Grid.visible:=False, а потом True, то все нормально, никаких ошибок. Но ведь это не решение?
Thread создаю через beginthread и завершаю terminatethread.

GuAV ©   (18.11.05 13:35) [3]
Я не ипользую такие методы. Это не наш метод =)


 
Polevi ©   (2005-11-18 14:09) [5]

код потока приведи


 
Leonid Troyanovsky ©   (2005-11-18 14:15) [6]


> Andy BitOff ©   (18.11.05 13:58) [4]

> Thread создается один, в нем выполняется запрос к Oracle.
>  Все проходит удачно. Для отображения использую ExpressQuantumGrid
> 5 в нем возникает глюк, не отображаются полосы прокрутки.
>  Если на врямя работы Thread сделать Grid.visible:=False,
>  а потом True, то все нормально, никаких ошибок. Но ведь
> это не решение?


В демках есть пример с выполнением запроса в потоке,
bkQuery сравнись с ним.

> Thread создаю через beginthread и завершаю terminatethread.

TerminateThread - не наш метод.
На худой конец - TerminateProcess (серьезно).

Лучше, посмотри, наверняка у Оракла есть и асинхронные запросы
или возможности для убиения длинных запросов.

Кста, у сторонних контролов - чужие глюки.
Попробуй с обычным гридом.

--
Regards, LVT.


 
Andy BitOff ©   (2005-11-18 14:21) [7]


> Polevi ©   (18.11.05 14:09) [5]

В том-то и дело, что я много чего пробовал, вплоть до коментирования всего побочного кода, не отвечающего за непосредственную работу потока и в результате этого там оставалась одна строчка DataModule2.OracleDataSet5.Active:=True;, которая и выполняла соответственно запрос. Вне потока выводится форма, в которой отображается время выполнения запроса. В таймере три строчки:

   inc(TimeTH);
   DivMod(TimeTH,60,m,s);
   frm_Wait.RzLabel1.Caption:="Подождите, идет обработка запроса..."+#13#10+RightStr(TimeToStr(EncodeTime(0,m,s,0)),5);


 
Andy BitOff ©   (2005-11-18 14:33) [8]

Блин!!!!! Я всетаки склоняюсь к мысли, что это глюк грида, потому, что если на время запроса его скрывать, то все работает как часы.
А жаль... Поскольку, это должна быть дема показывающая возможности ExpressQuantumGrid на наших базах, с последующей покупкой выше означенного грида, если он, конечно, покажет себя вовсей красе. И он показал =) Но вот этот досадный глюк... Правда всегда можно отмазаться, сказав, что мол, это надо для ускорения запроса или еще какую белиберду придумать =)


 
Andy BitOff ©   (2005-11-18 14:35) [9]


> Leonid Troyanovsky ©   (18.11.05 14:15) [6]
> TerminateThread - не наш метод.
> На худой конец - TerminateProcess (серьезно).

Это переписал, спасибо. Об остальном, посмотрю, тоже спасибо.


 
GuAV ©   (2005-11-18 14:40) [10]

Глупый вопрос - все ли межпоточные обращение к VCL синхронизированы ?


 
Andy BitOff ©   (2005-11-18 15:09) [11]

А где тут синхронизацию вставлять, и как?
Специально все урезал и упростил, но даже так, тот же самый эффект.

procedure Tfrm_Main.RunSQL(Str:string);
begin
 DataModule2.OracleDataSet5.Active:=False;
 DataModule2.OracleDataSet5.SQL.Text:=Str;
 termthread:=False;
 Timer1.Enabled:=True;
 h1 := beginthread(nil, 1024, @THRunSQL, nil, 0, th1);
end;

////////////////////////////////////////////////////////////////////////////////
procedure THRunSQL;
begin
 try
   DataModule2.OracleDataSet5.Active:=True;
 finally
   termthread:=True;
 end;
end;

////////////////////////////////////////////////////////////////////////////////
procedure Tfrm_Main.Timer1Timer(Sender: TObject);
begin
 if termthread then begin
   Timer1.Enabled:=False;
   TerminateProcess(h1,0);
 end;
end;


 
Leonid Troyanovsky ©   (2005-11-18 15:22) [12]


> Andy BitOff ©   (18.11.05 15:09) [11]
> А где тут синхронизацию вставлять, и как?


Во-первых, type TThreadFunc = function(Parameter: Pointer): Integer;
Во-вторых, срочно изучать пример из демок.
В-третьих, насчет TerminateProcess я говорил серьезно,
но не буквально :) Просто закомментируй, раз уж непонятно.

--
Regards, LVT.



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

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

Наверх




Память: 0.5 MB
Время: 0.043 c
6-1118759871
Mac333
2005-06-14 18:37
2005.12.18
IdSMTP и TIdAttachment -> Content-Type: text/html -> text/plain ?


1-1132550676
vitek
2005-11-21 08:24
2005.12.18
Image в RichEdit


3-1130749811
alex_1234
2005-10-31 12:10
2005.12.18
D6,ZEOS,MySQL: не работает :-(


14-1132684095
ANB
2005-11-22 21:28
2005.12.18
Выбираю технологию


14-1132988205
Snap
2005-11-26 09:56
2005.12.18
Ненужная утилита