又是我...Indy使用问题 局域网聊天程序的又一些困惑
由于一开始的不了解,我的程序已经不能完全按照最优化的方法来写了,对我来说时间不够了。
我的聊天程序大概是这样的:
1)在服务器设置了一个队列List用来保存已经连接的线程信息吗,其中包括Thread
2)在客户端的聊天界面设置了一个进程,监听发过来的信息,保存到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里面的例子,我运行了都卡死了..
有时间的朋友,帮帮忙,我很着急。谢谢啦
我的分数有限,但是还可以加一些。大家帮帮我。