我在程序中用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
但如果不动鼠标或不用键盘录入数据时他就一直都不会出现错误提示。是不是我的线程每次执行完后没释放完还是有其它冲突。

解决方案 »

  1.   

    to aiirii 这个是我的代码,请你帮我看一下,谢谢!
    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.