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

Вниз

Что за ошибка: 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.014 c
2-1133356119
JTAG
2005-11-30 16:08
2005.12.18
Ув коллеги подскажите как отделить символы от цифр в командной


4-1129578335
Rianon
2005-10-17 23:45
2005.12.18
Dll и использование немодальных форм в них


1-1132172994
gdaujk
2005-11-16 23:29
2005.12.18
ListView без полос прокрутки


14-1132506308
Pazitron_Brain
2005-11-20 20:05
2005.12.18
Нужно поговорить с врачом.


2-1133440242
Alexey Panov
2005-12-01 15:30
2005.12.18
почта и Delphi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский