还有就是如果while里面有recv等阻塞函数怎么办
引用 23 楼 fly4free 的回复:启动线程的时候传递的参数指针中的对象内容 加一个退出事件。 然后用 WaitForSingleObject 超时等待,具体设置多长时间,你自己定。 这样要退出的时候,外界 SetEvent 这个事件,然后 WaitForSingleObject 该线程句柄 可以超时等待,也可无限等待,然后就可干剩下的事了我试了,可是比如……
启动线程的时候传递的参数指针中的对象内容 加一个退出事件。 然后用 WaitForSingleObject 超时等待,具体设置多长时间,你自己定。 这样要退出的时候,外界 SetEvent 这个事件,然后 WaitForSingleObject 该线程句柄 可以超时等待,也可无限等待,然后就可干剩下的事了
那如果是你 你会怎么实现
引用 14 楼 wan212000 的回复:使用Sleep的作用是让CPU切换时间片,免得一个线程把所有CPU都占了,这样你感觉没道理? 不是不该让出时间片给其他线程,而是通过Sleep的办法不合适。说不客气点,用Sleep控制线程同步,多半是刚毕业的初哥才会干的事。
实现一种目的有多种方法,如果用sleep仅仅是为了不让一个线程过多的占用CPU,可以用其他的,比如waitforsingleobject,甚至用GetMessage搞的UI线程,有数据就PostThreadMessage给线程去处理。 而且sleep对时间的控制不是很准确,对程序逻辑的控制也不方便
使用Sleep的作用是让CPU切换时间片,免得一个线程把所有CPU都占了,这样你感觉没道理?
引用 8 楼 wan212000 的回复:可是我的这个线程是要循环的 就是反复的recv收到信息再根据信息进行解析再将信息反馈给它send,然后又继续recv 不明白为什么还是有不少人喜欢用Sleep。网络编程时,使用Sleep是万万不可的,因为有丢包的可能(尽管可能性不高)。给你个建议,设置recv和send超时,由其他线程通知该线程结束,而不是强制结束。 ……
recv在阻塞的时候,你觉得你能优雅的结束线程? 而且recv正在接收数据时,你要关闭它,如果这没关系,那很好做,closesocket,这样recv会返回-1,自然就可以跳出while了。
可是我的这个线程是要循环的 就是反复的recv收到信息再根据信息进行解析再将信息反馈给它send,然后又继续recv
引用 5 楼 zhoujielunzhimi 的回复:引用 4 楼 wan212000 的回复:怎么可能不Sleep()那样的话CPU的资源岂不是让一个线程占了 你先看下我写的,线程Wait的时候不占用资源的,相当于休眠了,然后等SetEvent来唤醒线程可是我的这个线程是要循环的 就是反复的recv收到信息再根据信息进行解析再将信息反馈给它send,然后又继续recv……
15,471
社区成员
49,181
社区内容
加载中
试试用AI创作助手写篇文章吧