程序涉及到socket通讯,多线程,数据库,不少是接收到socket请求后,开个线程,然后在线程里处理数据库。现在在压力测试过程中,会出现界面突然消失的情况,打开任务管理器一看,进程也没了,而且没有任何错误提示,请问这种情况有可能是什么原因引起的?
解决方案 »
- 请教一下,IdHTTP post登录网站的做法
- 偶的资源
- 新站点请兄弟们看看,多提点意见(http://www.duxiu.com http://mylib.duxiu.com)
- 哪位大虾知道SpreadSheet控件???? 急等,分不多就30全奉上
- 有关Drag的应用的问题
- 想不通实在想不通.
- 请问如何取得当前excel进程中用户所选定的数据啊(急)
- 这个信息存放在注册表什么位置
- 如何在access里建立索引??,索引的个数有限制吗??(牛虻)
- 请问在局域网中能否指定一台机器作为主服务器给局域网中的其它机器提供Web Service服务?
- ???如何判断Edit1中输入的每一字符都为数字???
- 关于BHO的问题
begin
try
try
CoInitialize(nil);
Ra_len := sizeof(Ra);
RecvSocket:=accept(FormMain.MainServer, @ra, @ra_len ); //接收数据
fdset := new(pfdset);
fdset.fd_count := 1;
fdset.fd_array[0] := RecvSocket; //超时10秒
timeout:=new(pTimeVal);
timeout.tv_sec:=10;
timeout.tv_usec:=0;
select(RecvSocket, fdset, nil, nil, timeout); //握手信号,接收
RetLen := recv(RecvSocket, BlockBuf, 1024, 0);
//收到数据
if RetLen>0 then
begin
...数据库操作(都是数据库操作函数,ADOConnection,ADOQuery动态生成,函数最后释放,有临界区)
end; except
exit;
end;
finally
if fdset<>nil then
Dispose(fdset); if timeout<>nil then
Dispose(timeout);
closesocket(RecvSocket); CoUninitialize;
end;
end;
你最好加个日志,记录每个时间段开了多少个线程,如果有可能最好记录数据库最大的并发连接数。
这可能要综合分析一下。多线程的程序本身就不太好调试,稳定性比单线程差些。
多线程最常见的问题是资源访问冲突。