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

Вниз

Как избавиться от сообщения A Win32 API functuion failed   Найти похожие ветки 

 
DIV   (2002-11-28 07:59) [0]

Написал диспетчер с 1 потоком.
Поток был нужен чтобы обработать нажатие клавиши прекращения обработки.
При выходе из программы По требованию (использую Application.Terminate)
получаю сообщение: Project Disp.exe exception class EWin32Error message "A Win32 API functuion failed". Process stopped.
И вижу это приложение в памяти.

Вот шапка исходника:

{$A+,B-,C+,D+,E-,F-,G+,H+,I+,J+,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1}
{$MINSTACKSIZE $00004000}
{$MAXSTACKSIZE $00100000}
{$IMAGEBASE $00400000}
{$APPTYPE GUI}
unit Obr;

interface

uses
Classes,Basa,Windows,SysUtils,FileCtrl;

type
MyObr = class(TThread)

и т.д.


 
Victor_Cr   (2002-11-28 08:50) [1]

Если у тебя ошибка выскакивает при закрытии приложения то это не обязательно глючит процедура прекращающая работу программы. Так сходу можно предположить, что ты чего-то не освободил. Напиши подробнее.


 
DIV   (2002-11-28 09:15) [2]

Из переменных у меня там критична, пожалуй только
sr: TSearchRec;

Но я её освобождаю

procedure MyObr.Execute;
begin
try
while l_1<>2 do Work_f;
finally
FindClose(sr);
end;
end;


 
Victor_Cr   (2002-11-28 10:25) [3]

Поставь в начале MyObr.Execute FreeOnTerminate := True
И еще приведи текст Work_f.


 
DIV   (2002-11-28 10:30) [4]

Я уже пытался уменьшить программу обработки только до отдыха .. но все остается по-прежнему

Procedure MyObr.Work_F;
var
r2,r3:integer;
begin
D:= Now;
DecodeTime( D, Hour, Min, Sec, MSec);
FormWork.Memo1.Lines.Add(DateTimeToStr(Date)+" "+IntToStr(Hour)+ ":"+ IntToStr(Min)+ ":"+ IntToStr(Sec)+" Начало работы");
D:=Den_p;
DecodeDate(D, Year, Month, Day);
j:=0;
l_1:=1;
{ with DataModule1.Spr_fil do begin
First; //На начало
j:=0; //ни одного не за рейс не обработано
while (not Eof) and (l_1<>2) do
begin
l1:=0; //ошибок нет
Obr_F;
Next;
end;
end;}
if j=0 then //Если ничего за проход не найдено - отдыхать
begin
l_1:=3;
FormWork.SpOtd.Left:=FormWork.BitStop.Left;
FormWork.SpOtd.Visible:=True;
FormWork.ProBar.Visible:=True;
FormWork.Refresh;
DecodeTime(T_ot,Hour,Min,Sec,MSec);
r2:=Hour*360+Min*60+Sec; {секунд отдыха}
T1:=Time+T_ot; {время окончания отдыха}
while (Time<=T1) and (l_1<>2) and (l_1<>1) do
begin
T2:=T1-Time; // осталось отдыхать
DecodeTime(T2,Hour,Min,Sec,MSec);
r3:=r2- (Hour*360+Min*60+Sec);
FormWork.ProBar.Position:=100 * r3 div r2;
end;
FormWork.SpOtd.Visible:=False;
FormWork.ProBar.Visible:=False;
FormWork.Refresh;
end;

end;



 
DIV   (2002-11-28 10:58) [5]

А вызываю этот поток так -
procedure TFormWork.N1Click(Sender: TObject);
var
Th:MyObr;
begin
FormWork.Caption:="Обработка файлов";
DbGrid1.DataSource:=nil;
Panel1.Visible:=false;
BitStop.Left:=FormWork.Width-BitStop.Width-8;
Memo1.Width:=BitStop.Left-16;
Memo1.Height:=FormWork.ClientHeight-8-23-28;
BitStop.Visible:=True;
L_1:=1;
FormWork.Menu:=nil;
Memo1.Top:=0;
Memo1.Visible:=True;
FormWork.Memo1.Clear;
// создаю поток
Th:=MyObr.Create(True);
// задаю приоритет
Th.Priority:=TpNormal;
// запускаю
Th.Resume;
end;


 
Victor_Cr   (2002-11-28 11:25) [6]

Значит так все вызовы из потока Визуальных компонент типа TMemo, SpOtd, ProBar и т.д. нужно вызывать с помощью сообщений или синхронизации. Для того чтоб приложение не висло делаешь проверку не надо ли изменить значение ProBar и только тогда вызывать синхронизацию.

//Вместо FormWork.ProBar.Position:=100 * r3 div r2
// Попробуй что-то похожее на
if 100 * r3 div r2 <> OldValue then
begin
OldValue := 100 * r3 div r2;
Synchronize(AnyWhat);// Вызов FormWork.ProBar.Position:=100 * r3 div r2;
end;


 
DIV   (2002-11-28 11:42) [7]

Спасибо!!! Я попробую. Сейчас убрал совсем ProBar - выходит нормально без ошибки



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

Форум: "Базы";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
14-51889
dkDimon
2002-11-20 16:09
2002.12.16
Delphi 7 Download


3-51564
remim
2002-11-27 00:14
2002.12.16
ADO


1-51718
Immortal_Xak
2002-12-06 12:01
2002.12.16
Help Password


14-51884
iLover
2002-11-22 19:15
2002.12.16
http://perl.mastak.ru/cgi-bin/gb.pl


8-51841
faf
2002-09-01 10:50
2002.12.16
Как, сделать, спектроанализатор?





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