Форум: "Основная";
Текущий архив: 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