首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

句柄、内存释放有关问题

2013-01-01 
句柄、内存释放问题仿照例子做了个多线程,但运行时发现句柄一直再增加,内存也不能释放,严重时存储文件会导

句柄、内存释放问题
仿照例子做了个多线程,但运行时发现句柄一直再增加,内存也不能释放,严重时存储文件会导致out of system resources! 如何解决呢?

function MyFun(p: Pointer): Integer; stdcall;
begin
  BytesToRead:=11;
  SI:=SI_Read(devHandle,@bufferIn,BytesToRead,BytesSucceed);
  datausb:= BufferIn[2]*10+BufferIn[3]+BufferIn[4]*0.1+BufferIn[5]*0.01+BufferIn[6]*0.001; 
  datausb_e:=-(BufferIn[8]+BufferIn[9]*0.1+BufferIn[10]*0.01+BufferIn[11]*0.001);
  form1.Edit1.Text:=FloatTOStr(datausb);
  form1.ListBox2.items.add(FloatTOStr(datausb));
  form1.Edit3.Text:=FloatTOStr(datausb_e);
  Result := 0;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
  ID: THandle;
begin
 CreateThread(nil, 0, @MyFun, nil, 0, ID);
end;

[解决办法]
!!每次计时器一到你就创建线程?
[解决办法]
form1.Edit1.Text:=FloatTOStr(datausb);
  form1.ListBox2.items.add(FloatTOStr(datausb));
  form1.Edit3.Text:=FloatTOStr(datausb_e);
这些都是线程不安全的
[解决办法]
二楼说的对,在多线程中不要操作主窗体中的控件。实在要操作,对线程要进行处理,不要同时操作这些控件。比如线程互斥就可以解决了!
[解决办法]
时钟里不能多次创建线程
[解决办法]
采集线程就创建一个,采集完不释放。在线程里定时采集数据,然后线程用消息通知主线程(前台界面)

热点排行