我在程序中用TIMER创建并打开一个线程后:
procedure TForm1.Timer1Timer(Sender: TObject);
var
//hThread:Thandle;
ThreadID:DWord;
begin
CreateThread(nil,0,@pic_show,nil,0,ThreadID);
end;
TIMER是每隔20秒运行一次,函数功能主要是在主界面上显示一个标题,但在程序运行后,
我在程序界面录入数据时有时如果是刚好碰上TIMER调用线程时会出现这个错误提示,但不是每次录入数据时碰上都会出现提示,只是偶尔碰上就会提示,弄得我都不知道是在录入数据时产生的还是其它:
project Project1.exe raised exception class EoutOfResources with message"请求资源在使用中."Process stopped.Use step or Run to continue
但如果不动鼠标或不用键盘录入数据时他就一直都不会出现错误提示。是不是我的线程每次执行完后没释放完还是有其它冲突。
procedure TForm1.Timer1Timer(Sender: TObject);
var
//hThread:Thandle;
ThreadID:DWord;
begin
CreateThread(nil,0,@pic_show,nil,0,ThreadID);
end;
TIMER是每隔20秒运行一次,函数功能主要是在主界面上显示一个标题,但在程序运行后,
我在程序界面录入数据时有时如果是刚好碰上TIMER调用线程时会出现这个错误提示,但不是每次录入数据时碰上都会出现提示,只是偶尔碰上就会提示,弄得我都不知道是在录入数据时产生的还是其它:
project Project1.exe raised exception class EoutOfResources with message"请求资源在使用中."Process stopped.Use step or Run to continue
但如果不动鼠标或不用键盘录入数据时他就一直都不会出现错误提示。是不是我的线程每次执行完后没释放完还是有其它冲突。
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Mask;type
TForm1 = class(TForm)
Image2: TImage;
Timer1: TTimer;
Button1: TButton;
Image1: TImage;
Button2: TButton;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
bz_bhsh:integer;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}function pic_show(P:pointer):Longint;stdcall;
var
newbmp: TBitmap;
i, j, bmpheight, bmpwidth: integer;
begin
form1.Image2.Visible := false;
form1.Image2.Picture.LoadFromFile('c:\threaD\dy_7a.bmp');
newbmp := TBitmap.Create;
newbmp.Transparent := True;
newbmp.Width := form1.Image2.Width;
newbmp.Height := form1.Image2.Height;
bmpheight := form1.Image2.Height;
bmpwidth := form1.Image2.Width;
if form1.bz_bhsh < 5 then begin
case form1.bz_bhsh of
1: begin
i := 0;
while i <= bmpheight do begin
j := i;
while j > 0 do begin
newbmp.Canvas.CopyRect(Rect(0, j - 1, bmpwidth, j), form1.Image2.Canvas, Rect(0, bmpheight - i + j - 1, bmpwidth, bmpheight - i + j));
newbmp.Canvas.CopyRect(Rect(0, bmpheight - j, bmpwidth, bmpheight - j + 1), form1.Image2.Canvas, Rect(0, i - j, bmpwidth, i - j + 1));
j := j - 1;
end;
form1.Canvas.Draw(97, 0, newbmp);
i := i + 1;
end;
end;
2: begin
for i := 0 to bmpheight do begin
newbmp.Canvas.CopyRect(Rect(0, bmpheight - i, bmpwidth, bmpheight), form1.Image2.Canvas, Rect(0, 0, bmpwidth, i));
form1.Canvas.Draw(97, 0, newbmp);
end;
end;
3: begin
i := 0;
while i <= bmpwidth do begin
j := i;
while j > 0 do begin
newbmp.Canvas.CopyRect(Rect(j - 1, 0, j, bmpheight), form1.Image2.Canvas, Rect(bmpwidth - i + j - 1, 0, bmpwidth - i + j, bmpheight));
newbmp.Canvas.CopyRect(Rect(bmpwidth - j, 0, bmpwidth - j + 1, bmpheight), form1.Image2.Canvas, Rect(i - j, 0, i - j + 1, bmpheight));
j := j - 2;
end;
form1.Canvas.Draw(97, 0, newbmp);
i := i + 2;
end;
end;
4: begin
i := bmpheight;
while i > 0 do begin
for j := 10 to i do begin
newbmp.Canvas.CopyRect(Rect(0, j - 10, bmpwidth, j), form1.Image2.Canvas, Rect(0, i - 10, bmpwidth, i));
form1.Canvas.Draw(97, 0, newbmp);
end;
i := i - 10;
end; end;
end;
form1.bz_bhsh := form1.bz_bhsh + 1;
end
else begin
form1.bz_bhsh := 1;
end;
newbmp.Transparent := False;
newbmp.Free;
form1.Image2.Visible := True;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
bz_bhsh:=1;
end;procedure TForm1.Timer1Timer(Sender: TObject);
var
hThread:Thandle;
ThreadID:DWord;
begin
CreateThread(nil,0,@pic_show,nil,0,ThreadID);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
pic_show(nil);
end;end.