之前测试时使用全局变量ADOQUERY运行sql语句,由于sql语句执行时间很长,在一个客户端执行的期间,另一个客户端又要求执行这个指令,此时就返回错误:“在异步运行时,操作不能被执行。”这种情况在每个execute线程中建ADOQUERY局部变量就可以解决。但是由于sever端有一个memo1用来显示接收到的信息,同样道理,也有可能遇到上面使用这种共享资源而出错的情况。这时肯定不能建局部memo来解决啊?应该如何解决呢?排队?
解决方案 »
- 求助学习delphi的经典资料
- delphi中解释XML哪个组件最快?
- 请问一网友用DELPHI帮我写的程序可以改一下软件里面的地址吗
- 一个关于SQL和DBCheckbox的问题
- 散分 :基本明白了临时表的问题.(沙鸥,dickeybird一定来啊)
- 攒机,请大家帮我选主板!
- 请大家速来帮忙
- 大家好,刚学做组件,一个很菜的问题。
- 如果Access数据库(db1)里有一个表(1040000251401),怎样取到该表名?
- 我们用microsoft的webbrowser控件开发的程序有内存泄漏
- 如何将VCL控件通过handle传递到别的此VCL控件的变量里,使这个VCL变量与它相等.
- 评选CSDN-Delphi版十大怪名!
//------------------------------------------------------------------------------
//显示通讯状态信息
procedure TthdDP.DisplayInfo;
var
i:integer;
begin
MainForm.sgInfo.RowCount:=1;
for i:=low(uData) to high(uData) do
with MainForm do
begin
sgInfo.RowCount:=sgInfo.RowCount+1;
sgInfo.Cells[0,sgInfo.RowCount-1]:=uData[i].uInfo.sIp;
sgInfo.Cells[1,sgInfo.RowCount-1]:=uData[i].uInfo.sStatus;
sgInfo.Cells[2,sgInfo.RowCount-1]:=dateTostr(uData[i].uInfo.dFrom);
end;
if MainForm.sgInfo.RowCount>1 then
MainForm.sgInfo.fixedRows:=1;
end;
procedure TthdDP.Execute;
begin
inherited;
case self.FOperType of
1://暂存数据
begin
Synchronize(addRec);
Synchronize(self.DisplayInfo);
end;
2://数据入库
begin
Synchronize(self.InsertDBReport);
Synchronize(self.DeleteRec);
Synchronize(DisplayData);
Synchronize(DisplayInfo);
end;
3://连接请求
begin
Synchronize(self.initNewIPConn);
Synchronize(DisplayInfo);
end;
4://client Disconnect
begin
end;
end;
end;
能否提供一些例子程序呢?谢谢!!
uses SyncObjs;
FLock : TCriteronSection操作memo之前lock一下,完了解锁
FLock.Enter;memo1.lines.add("""""");FLock.leave