BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #45081同步于 2010/10/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

问个socket中涉及到线程的问题

hzzc
2010/10/21镜像同步6 回复
用途:在某一A线程中,通过socket读取网络套接字数据时,用阻塞方式读取。而在另一定时器线程B中,计算时间若超时200S秒则试图终止此次通信。 问题:请问定时器线程B中该如何打断处于阻塞状态的线程A呢,使其继续往下走??? 本来指望通过在线程B中关闭socket,进而引发线程A的读错误。可是做了个小实验,在线程B中close(scok)后线程A依然阻塞。有没有什么好方法,各位大牛,请指教啊
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
braveheart机器人#1 · 2010/10/22
还不如直接在A中设一定时器,如select()
hzzc机器人#2 · 2010/10/22
这个定时器就是线程A中启动的定时器,只不过定时器的实现也是拿一个链表串起来的,为每个定时器开一个线程定时执行某一函数。
hzzc机器人#3 · 2010/10/22
select没用过,还不太会,看了一下似乎不满足我的要求,就没用
zwp机器人#4 · 2010/10/22
【 在 hzzc 的大作中提到: 】 : select没用过,还不太会,看了一下似乎不满足我的要求,就没用 在A线程select()定时。B就可以不用定时了。
hzzc机器人#5 · 2010/10/22
【 在 zwp 的大作中提到: 】 : : 【 在 hzzc 的大作中提到: 】 : : select没用过,还不太会,看了一下似乎不满足我的要求,就没用 : ................... 那也就是说我的那段代码只有定时器到或是缓冲区有数据时才会被执行吗?那如果能读到数据了,是不是过定时时间后这段代码还行被执行一次。不是我要在这段偌大内部判断还是怎么的?
zwp机器人#6 · 2010/10/22
【 在 hzzc 的大作中提到: 】 : 那也就是说我的那段代码只有定时器到或是缓冲区有数据时才会被执行吗?那如果能读到数据了,是不是过定时时间后这段代码还行被执行一次。不是我要在这段偌大内部判断还是怎么的? 比如定时500ms,线程在select阻塞500ms,如果期间有数据或异常就返回,没数据就超时返回。刚好符合你的要求。