H
hardblue
Unregistered / Unconfirmed
GUEST, unregistred user!
var
cs:tcriticalsection;
implementation
//tidtcpserver的execute 事件中的代码如下:
procedure TForm1.serverExecute(AThread: TIdPeerThread);
var
r_data:string;
//接收的字符串
sl:tstringlist;
//分隔接收数据为各个字段
lenstr:string;
//pklen:数据长度字段
package_len:integer;
//数据包长度 = 去掉pklen字段以后的长度
begin
with athread.Connectiondo
begin
sl:=tstringlist.Create;
//创建tstringlist
lenstr:= readstring(4);
//读取数据长度
try
package_len := strtoint(lenstr);
except
begin
console.Lines.Add('接收数据长度错误!');
exit ;
end;
end;
r_data := readstring(package_len);
//读取数据包
sl:= split(r_data,'|');
//将各个字段分解出来
if sl.Strings[1] = '1111' then
//查询操作
begin
try
begin
memo1.Lines.Add('1:-----进入保护区'+');
cscx.Enter;
//线程保护 //这里应该是出错的地方
memo2.Lines.Add('2:-----进入保护区成功');
end;
except
begin
......
end;
end;
query(sl.Strings[2],athread);
//query为自定义函数,使用adoquery进行数据查询
r_data := '';
cscx.Leave;
end;
freeandnil(sl);
end;
end;
//因为使用adoquery对数据库进行查询,adoquery不是线程安全,所以用tcriticalsection进行线程保护,当多个客户端连接过来,并进行数据查询,运行一段时间以后,程序会出错,出错以后,客户端还可以连接上服务器端,但不能再行数据查询了,这时当客户端再发查询的命令过来,就会运行到memo1.Lines.Add('1:-----进入保护区'+');
这条语句就不再继续运行了? 不知道是什么原因,看上去像是cs.enter的时候出了错,但cs.enter的时候我进行了异常保护,但运行的时候没有捕年捉到异常信息,不知道是什么原因,请大家帮着看看代码!!!! 多谢
cs:tcriticalsection;
implementation
//tidtcpserver的execute 事件中的代码如下:
procedure TForm1.serverExecute(AThread: TIdPeerThread);
var
r_data:string;
//接收的字符串
sl:tstringlist;
//分隔接收数据为各个字段
lenstr:string;
//pklen:数据长度字段
package_len:integer;
//数据包长度 = 去掉pklen字段以后的长度
begin
with athread.Connectiondo
begin
sl:=tstringlist.Create;
//创建tstringlist
lenstr:= readstring(4);
//读取数据长度
try
package_len := strtoint(lenstr);
except
begin
console.Lines.Add('接收数据长度错误!');
exit ;
end;
end;
r_data := readstring(package_len);
//读取数据包
sl:= split(r_data,'|');
//将各个字段分解出来
if sl.Strings[1] = '1111' then
//查询操作
begin
try
begin
memo1.Lines.Add('1:-----进入保护区'+');
cscx.Enter;
//线程保护 //这里应该是出错的地方
memo2.Lines.Add('2:-----进入保护区成功');
end;
except
begin
......
end;
end;
query(sl.Strings[2],athread);
//query为自定义函数,使用adoquery进行数据查询
r_data := '';
cscx.Leave;
end;
freeandnil(sl);
end;
end;
//因为使用adoquery对数据库进行查询,adoquery不是线程安全,所以用tcriticalsection进行线程保护,当多个客户端连接过来,并进行数据查询,运行一段时间以后,程序会出错,出错以后,客户端还可以连接上服务器端,但不能再行数据查询了,这时当客户端再发查询的命令过来,就会运行到memo1.Lines.Add('1:-----进入保护区'+');
这条语句就不再继续运行了? 不知道是什么原因,看上去像是cs.enter的时候出了错,但cs.enter的时候我进行了异常保护,但运行的时候没有捕年捉到异常信息,不知道是什么原因,请大家帮着看看代码!!!! 多谢