Delphi下的线程同步

2016-10-20 10:46:26来源:oschina作者:HelloYujie人点击

第七城市


压力测试模块会创建若干TIocpClient对象去连接Server,批量发送消息到Server,在TIocpClient对象OnReceive函数里,会统计接收到的消息总数。
原先,在OnReceive中,我是这样写统计消息总数的代码的:
```Delphi
Inc(FiRecCount);
lblRecCount.Caption := Format('总接收:%d', [FiRecCount]);
```
我没有留意到,OnReceive函数是在创建TIocpClient对象时赋值到TIocpClient对象的OnReceive属性的:
```Delphi
lpClient := TIocpClient.Create(nil);
lpClient.Host := FlpGlobal.Host;
lpClient.Port := FlpGlobal.Port;
lpClient.OnConnected := OnConnected;
lpClient.OnDisconnected:= OnDisconnected;
lpClient.OnReceive:= OnReceive;
lpClient.OnIdle := OnIdle;
lpClient.Tag:= Integer(Item);
```
每个TIocpClient对象都是一个独立的线程,在OnReceive函数中需要解决线程同步问题,修改后的代码为:
```Delphi
TThread.Synchronize(nil,
procedure
begin
Inc(FiRecCount);
lblRecCount.Caption := Format('总接收:%d', [FiRecCount]);
end
);
```
但是这样修改会出现新的问题,我无法停止压力测试了,需要修改成这样才行:
```Delphi
if not Terminated then TThread.Synchronize(nil,
procedure
begin
Inc(FiRecCount);
lblRecCount.Caption := Format('总接收:%d', [FiRecCount]);
end
);
```
加多了一个判断,现在还不懂什么意思,之后补上。。。
第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台