8
8541051
Unregistered / Unconfirmed
GUEST, unregistred user!
我在IdTCPServer的OnExecute事件中想实现这样的代码:
procedure TF_Main.IdTCPS1Execute(AThread: TIdPeerThread);
begin
1。监听客户端发来的信息;
2。读数据库中的最大流水号并且将流水号+1(流水号没有重复,且相邻记录差1);
3。将新的流水号及别的一些数据发给另一服务端;
4。接收到服务端的成功回执;
5。流水号入数据库成为最大流水号(没有成功回执流水号不能入库)
6。稍作处理将信息返回到客户端;
end;
问题出在2和5上。因为是自动多线程的。所以来一个线程就读一次流水号,流水号+1操作后入库。可能出现这种情况:一个线程从数据库中读出流水号,然后+1,还没来得及入库另一个线程就来了,读了和上一个线程一样的流水号,然后+1。这样入库会产生一样的流水号。所以请问大侠怎么能控制这样的线程。我记得是AThread.什么的属性可以。有别的方法也行。最好有一点代码说明。谢谢!
procedure TF_Main.IdTCPS1Execute(AThread: TIdPeerThread);
begin
1。监听客户端发来的信息;
2。读数据库中的最大流水号并且将流水号+1(流水号没有重复,且相邻记录差1);
3。将新的流水号及别的一些数据发给另一服务端;
4。接收到服务端的成功回执;
5。流水号入数据库成为最大流水号(没有成功回执流水号不能入库)
6。稍作处理将信息返回到客户端;
end;
问题出在2和5上。因为是自动多线程的。所以来一个线程就读一次流水号,流水号+1操作后入库。可能出现这种情况:一个线程从数据库中读出流水号,然后+1,还没来得及入库另一个线程就来了,读了和上一个线程一样的流水号,然后+1。这样入库会产生一样的流水号。所以请问大侠怎么能控制这样的线程。我记得是AThread.什么的属性可以。有别的方法也行。最好有一点代码说明。谢谢!