仿照例子做了个多线程,但运行时发现句柄一直再增加,内存也不能释放,严重时存储文件会导致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;
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;
解决方案 »
- 我写了一个可以透明显示文本滚动的控件,但是不能放到picshow控件前面显示,请帮忙解决!
- 如何判断鼠标是否在该控件?
- SaveToFile后,马上打开那个文件,为什么失败?
- 程序中如何屏蔽ping操作的错误
- dbedit显示问题
- 如何在程序中自动登陆数据库,而该数据库有密码的。(bde和Paradox)
- 帮我看看为什么错了。怎么改
- 如何执行一个外部的可执行文件,请给出例程?
- 怎样把 datamodule做在 dll中,由主程序调用
- Dbgrid选值得问题
- delphi7 ADOConnection1 连接远程mysql的问题
- 用ado连接局域网sql server2005时出错:数据库不存在或是拒绝访问
form1.ListBox2.items.add(FloatTOStr(datausb));
form1.Edit3.Text:=FloatTOStr(datausb_e);
这些都是线程不安全的
这里有好的例子:http://www.cnblogs.com/del/category/174761.html
SI:=SI_Read(devHandle,@bufferIn,BytesToRead,BytesSucceed);引起问题的主要原因好像就是1楼、5楼所说的,在时钟里创建线程,如果不通过时钟读取数据,还有其他的方法吗?刚接触DELPHI,请指教!