由于一开始的不了解,我的程序已经不能完全按照最优化的方法来写了,对我来说时间不够了。
我的聊天程序大概是这样的:
1)在服务器设置了一个队列List用来保存已经连接的线程信息吗,其中包括Thread2)在客户端的聊天界面设置了一个进程,监听发过来的信息,保存到TStringList里面。同时,设置了一个Timer,每过一段时间读取TStringList,并作出处理。3)在好友列表里面,又用了一个Timer,不断的Write指令给服务器,让他传回当前所有在线用户的信息。4)我用LockList阻塞所有的线程,然后,对每一个线程都发送数据,再在客户端进行分析处理,是自己的信息就拿走,不是自己的信息就放过。大概就是这些。我现在又三个问题
1)聊天的时候,聊着聊着会卡住。例如A对B说:你好 ,B会卡死, A再对B说一次你好,则B会收到两次你好的信息,并且先发送的你好在后面显示出来了。2)聊天界面的当前时间提示(一个Label和Timer控制的)会卡住3)有时候会出现Out of **** memory 大概是这个的错误信息。我曾经想到的解决办法1)是好友列表里面的Timer不断Write的缘故。所以曾经多设置过一个TcpClient用于区分,失败2)网友说是我的Write和Read都应该建立线程,分别处理,我的Write语句是和主进程一起进行的,所以会出现上面提到的“卡死”。不知道是不是这样3)卡死的源头到底在哪里呢?为什么呢?网络上的例子我认真分析过了,但是很少有可以运行成功的例子供我分析,Indy Demo里面的例子,我运行了都卡死了..
有时间的朋友,帮帮忙,我很着急。谢谢啦我的分数有限,但是还可以加一些。大家帮帮我。
我的聊天程序大概是这样的:
1)在服务器设置了一个队列List用来保存已经连接的线程信息吗,其中包括Thread2)在客户端的聊天界面设置了一个进程,监听发过来的信息,保存到TStringList里面。同时,设置了一个Timer,每过一段时间读取TStringList,并作出处理。3)在好友列表里面,又用了一个Timer,不断的Write指令给服务器,让他传回当前所有在线用户的信息。4)我用LockList阻塞所有的线程,然后,对每一个线程都发送数据,再在客户端进行分析处理,是自己的信息就拿走,不是自己的信息就放过。大概就是这些。我现在又三个问题
1)聊天的时候,聊着聊着会卡住。例如A对B说:你好 ,B会卡死, A再对B说一次你好,则B会收到两次你好的信息,并且先发送的你好在后面显示出来了。2)聊天界面的当前时间提示(一个Label和Timer控制的)会卡住3)有时候会出现Out of **** memory 大概是这个的错误信息。我曾经想到的解决办法1)是好友列表里面的Timer不断Write的缘故。所以曾经多设置过一个TcpClient用于区分,失败2)网友说是我的Write和Read都应该建立线程,分别处理,我的Write语句是和主进程一起进行的,所以会出现上面提到的“卡死”。不知道是不是这样3)卡死的源头到底在哪里呢?为什么呢?网络上的例子我认真分析过了,但是很少有可以运行成功的例子供我分析,Indy Demo里面的例子,我运行了都卡死了..
有时间的朋友,帮帮忙,我很着急。谢谢啦我的分数有限,但是还可以加一些。大家帮帮我。
解决方案 »
- C++结构体转 delphi结构体问题
- 用quickreport能合并單元格嗎?
- QuadPart := DWORDLONG(LONGLONG(-1)) 语句是什么意思?
- delphi三层写入服务端数据库问题
- 对于
- 两个不同的数据库(Sql Server2000),含有一张相同的数据表,如何对比检索插入数据??
- 存储过程参数的代入格式,在线等
- 散分,帮我讲讲存储过程的执行原理,包括运行效率的改善和前台与后台的资源消耗问题.
- 编译是能否将dll中代码编进去
- 怎样获得socket连接的序号?
- 软件选择delphi-labview
- delphi前景咋樣啊!!!!!!!我剛找了個delphi的工作!!!
是的
我看了那个啊 他运行时客户端卡死了.... 我差不多是按照那个做的
对了 那个你说的链路层里面的Thread的类型是定义成Pointer还是TIdPeerThread啊
我的聊天程序大概是这样的:
1)在服务器设置了一个队列List用来保存已经连接的线程信息吗,其中包括Thread 2)在客户端的聊天界面设置了一个进程,监听发过来的信息,保存到TStringList里面。同时,设置了一个Timer,每过一段时间读取TStringList,并作出处理。
//监听这个地方用一个线程,读取TStringList并处理的过程肯定 会阻塞,不卡才怪,处理完成了就不卡了3)在好友列表里面,又用了一个Timer,不断的Write指令给服务器,让他传回当前所有在线用户的信息。
//为啥不断的Write?为什么不在用户状态发生变化时,由服务器主动向所有客户端广播用户列表?当然你也需要一个监听线程,如果压力不大,完全可以和前面用同一个线程4)我用LockList阻塞所有的线程,然后,对每一个线程都发送数据,再在客户端进行分析处理,是自己的信息就拿走,不是自己的信息就放过。
//服务器端来LockList吧,是服务器判断后,发给相应客户端的线程,难道你要广播给所有用户,客户端自己分析数据包来决定是否显示在聊天窗口?麻烦吧
大概就是这些。我现在又三个问题
1)聊天的时候,聊着聊着会卡住。例如A对B说:你好 ,B会卡死, A再对B说一次你好,则B会收到两次你好的信息,并且先发送的你好在后面显示出来了。 2)聊天界面的当前时间提示(一个Label和Timer控制的)会卡住 3)有时候会出现Out of **** memory 大概是这个的错误信息。 我曾经想到的解决办法 1)是好友列表里面的Timer不断Write的缘故。所以曾经多设置过一个TcpClient用于区分,失败 //都在主线程里,当然仍然会卡死,主动发送好了,不用客户端不断Write,难道你想发心跳包给服务器?2)网友说是我的Write和Read都应该建立线程,分别处理,我的Write语句是和主进程一起进行的,所以会出现上面提到的“卡死”。不知道是不是这样 //Write可以单独创建线程,也可放在主线程里3)卡死的源头到底在哪里呢?为什么呢?网络上的例子我认真分析过了,但是很少有可以运行成功的例子供我分析,Indy Demo里面的例子,我运行了都卡死了..
//哪个卡死?
有时间的朋友,帮帮忙,我很着急。谢谢啦 我的分数有限,但是还可以加一些。大家帮帮我。