关于多线程的问题 线程1和2的工作内容一致线程1可以独立完成发送完数据后,直接判断缓冲区是否满,满了直接发送 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 同上,线程1和2必须合并,否则无法同时操作同一个端口.多线程访问同一资源,要加锁. 谢谢两位指点。那如果是定时呢,比如时间到了,但是线程1还在发送状态。 你应该用2个时间变量相减,来判断是否已经超时,而不是在某个时间点上固定执行.否则1正在发送,你2也要从同一个端口发送,不是依然要等待么,让1自己判断超时并发送,有什么区别 多谢!另外,我在考虑,需不需要用一个线程只负责监听接收服务器发来的数据,再用一个独立的线程处理接收的数据,包括拆包,存入消息队列B。 线程的数量,应该是在满足要求的情况下,越少越好吧? 合并线程1,2之后,设置线程3的优先级较高。在客户端发出发送数据请求的同时,如果有服务器发送数据请求,是否可以通过优先级高,确保服务器请求被优先执行? 所谓线程优先级,是指线程切换的时候,哪个更优先执行,而跟任务是否优先执行无关.既然你要合并1和2,那么一次只能发送1个数据,到底发送哪个数据,自己做个判断不就好咯,就是不要每次从队列里顺序取,而是先判断是否有服务器请求,有就拿出来执行,没有再顺序取只有1个发送线程,设置不设置优先级有区别? 多谢。那要这样的话,是不是线程3也可以不需要?整个程序一个线程就足够了,先判断是否有服务器请求,有的话拿来执行,没有的话顺序取发送消息队列中的消息发送出去。 如果请求不是非常多的话,这样做是完全可行的.就是侦听到数据来到,然后就直接发出去,连压入队列都省了.但是如果数据时多时少,则需要一个单独的线程,将接收到的信息先压入队列,然后慢慢处理.如果数据一直非常多,即使压入队列了,也处理不过来,就只能考虑开多线程分别处理了.当然多线程分别处理发送,你就要为每个线程单独开一个端口去发送,而不能所有线程都使用同一个端口,否则是没有意义的 如果请求不是非常多的话,这样做是完全可行的.就是侦听到数据来到,然后就直接发出去,连压入队列都省了.但是如果数据时多时少,则需要一个单独的线程,将接收到的信息先压入队列,然后慢慢处理.如果数据一直非常多,即使压入队列了,也处理不过来,就只能考虑开多线程分别处理了.当然多线程分别处理发送,你就要为每个线程单独开一个端口去发送,而不能所有线程都使用同一个端口,否则是没有意义的谢谢。不用多线程分别处理发送。发送队列A是业务程序生成的,通讯程序只负责打包,对于需要及时发送的,立即发送;对于不需要及时发送的,存入缓冲区,等缓冲区满了,再发送缓冲区内容。如果用两个线程,一个负责发送,一个负责接收服务器发来的数据,需要开两个端口不?发送方发出数据,需要接收方回应,这样的话,用异步发送,是不是就没意义了? 如果一个发送,一个接收,而且接收的还是刚刚发送的内容的回应,当然就不能开2个端口否则对方怎么知道应该发送给谁,一般都是你从哪个端口发送的,对方就发回这个端口.需要接收方回应,如果应答不正确,或无应答,需要重新发送?用异步的话,逻辑会相当复杂.用同步就简单的多. 怪我偷懒了。需要接收方回应,如果三次应答不正确,将未发送数据包移到失败消息日志中。接着发送下一条消息。接收的有对刚才发送内容的回应。其实,两方都需要发送内容,这个通讯程序是在客户端的,我需要发送业务程序产生的数据给服务器,并接收服务器下发的命令和软件更新。而且发送方都需要接收方做出回应。如果只用一个线程,采用同步的方法,需要注意些什么呢? 在服务器方也有通讯程序负责发送和接收数据。这样,就会有一种可能:在客户端通讯程序发送数据前,检测端口没有进来的数据,于是开始发送数据,而此时正好服务器发来数据。这样,我就要先响应服务器的请求。 怪我偷懒了。需要接收方回应,如果三次应答不正确,将未发送数据包移到失败消息日志中。接着发送下一条消息。接收的有对刚才发送内容的回应。其实,两方都需要发送内容,这个通讯程序是在客户端的,我需要发送业务程序产生的数据给服务器,并接收服务器下发的命令和软件更新。而且发送方都需要接收方做出回应。如果只用一个线程,采用同步的方法,需要注意些什么呢?如果只用一个线程,还采用同步,那你这个服务端就只能挂一个客户端,互相通信着玩了,客户端一多,必然互相打架.所以服务端应该是多线程的.当然客户端就只跟服务器通信,单线程一般足够了. 我现在只负责客户端的通讯程序,还在学习中~ 新手求助,“当前上下文中不存在名称” winform中使用MSOWC.DLL组件问题 如何修改AEECSS中的字段值 ====那里可以找到针对邮件格式的解析类==== 查询统计 请问在C#中如何禁止一个WINFORM的关闭按钮? 菜鸟新问:.net内网访问ftp C# winform 中如何设定让DATAGRID不绑定数据,而只做录入用? 怎么对注册表进行操作? winform 批量插入sqllite 速度慢 关于C#窗体间数据传递,新手求指导! 接口开发,截取字符串,COOKIE取值问题
多线程访问同一资源,要加锁.
那如果是定时呢,比如时间到了,但是线程1还在发送状态。
否则1正在发送,你2也要从同一个端口发送,不是依然要等待么,让1自己判断超时并发送,有什么区别
多谢!
另外,我在考虑,需不需要用一个线程只负责监听接收服务器发来的数据,再用一个独立的线程处理接收的数据,包括拆包,存入消息队列B。 线程的数量,应该是在满足要求的情况下,越少越好吧?
既然你要合并1和2,那么一次只能发送1个数据,到底发送哪个数据,自己做个判断不就好咯,
就是不要每次从队列里顺序取,而是先判断是否有服务器请求,有就拿出来执行,没有再顺序取只有1个发送线程,设置不设置优先级有区别?
那要这样的话,是不是线程3也可以不需要?整个程序一个线程就足够了,先判断是否有服务器请求,有的话拿来执行,没有的话顺序取发送消息队列中的消息发送出去。
就是侦听到数据来到,然后就直接发出去,连压入队列都省了.但是如果数据时多时少,则需要一个单独的线程,将接收到的信息先压入队列,然后慢慢处理.如果数据一直非常多,即使压入队列了,也处理不过来,就只能考虑开多线程分别处理了.当然多线程分别处理发送,你就要为每个线程单独开一个端口去发送,而不能所有线程都使用同一个端口,否则是没有意义的
就是侦听到数据来到,然后就直接发出去,连压入队列都省了.但是如果数据时多时少,则需要一个单独的线程,将接收到的信息先压入队列,然后慢慢处理.如果数据一直非常多,即使压入队列了,也处理不过来,就只能考虑开多线程分别处理了.当然多线程分别处理发送,你就要为每个线程单独开一个端口去发送,而不能所有线程都使用同一个端口,否则是没有意义的
谢谢。
不用多线程分别处理发送。发送队列A是业务程序生成的,通讯程序只负责打包,对于需要及时发送的,立即发送;对于不需要及时发送的,存入缓冲区,等缓冲区满了,再发送缓冲区内容。
如果用两个线程,一个负责发送,一个负责接收服务器发来的数据,需要开两个端口不?发送方发出数据,需要接收方回应,这样的话,用异步发送,是不是就没意义了?
否则对方怎么知道应该发送给谁,一般都是你从哪个端口发送的,对方就发回这个端口.需要接收方回应,如果应答不正确,或无应答,需要重新发送?
用异步的话,逻辑会相当复杂.用同步就简单的多.
接收的有对刚才发送内容的回应。其实,两方都需要发送内容,这个通讯程序是在客户端的,我需要发送业务程序产生的数据给服务器,并接收服务器下发的命令和软件更新。而且发送方都需要接收方做出回应。
如果只用一个线程,采用同步的方法,需要注意些什么呢?
接收的有对刚才发送内容的回应。其实,两方都需要发送内容,这个通讯程序是在客户端的,我需要发送业务程序产生的数据给服务器,并接收服务器下发的命令和软件更新。而且发送方都需要接收方做出回应。
如果只用一个线程,采用同步的方法,需要注意些什么呢?
如果只用一个线程,还采用同步,那你这个服务端就只能挂一个客户端,互相通信着玩了,客户端一多,必然互相打架.
所以服务端应该是多线程的.
当然客户端就只跟服务器通信,单线程一般足够了.