由于一开始的不了解,我的程序已经不能完全按照最优化的方法来写了,对我来说时间不够了。
我的聊天程序大概是这样的:
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里面的例子,我运行了都卡死了..
有时间的朋友,帮帮忙,我很着急。谢谢啦我的分数有限,但是还可以加一些。大家帮帮我。
解决方案 »
- DBImage 图片在打开对话框时有部分图片无法预览或是显示模糊不清!其它的正常
- dbgrideh中的功能实现
- TreeView以流的方式加载的问题!
- 怎样把从DBGRID中提取出的数据用WORD文档打开?
- 用 delphi 调用默认浏览器ie,如何使ie上面的工具栏不可见,而且窗口的大小可以自定义
- 谢谢 constantine(飘遥的安吉儿) !
- 如何控制combobox的显示?
- 怎么处理汉字的问题?
- 请问如何用listbox显示一个目录下的*.jpg文件
- 谁能够给一个client向server 传输文件的例子:
- 软件选择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里面的例子,我运行了都卡死了..
//哪个卡死?
有时间的朋友,帮帮忙,我很着急。谢谢啦 我的分数有限,但是还可以加一些。大家帮帮我。