一个TCP/IP的程序,已经启动了两个线程不停的来接收与发送数据。在接受线程中,只是将接收的数据依次放到一个队列中,而主程序不停地从这个队列中取数据:
while(1)
{
//从队列中取数据
}上面的方法确是能够取到数据,但是却会导致CPU的占用率为100%。后来在while循环中加上了sleep(1),能够解决这个问题,但总觉得这个方法不是一个好的方法,请问是否还有更好的方法?谢谢!
while(1)
{
//从队列中取数据
}上面的方法确是能够取到数据,但是却会导致CPU的占用率为100%。后来在while循环中加上了sleep(1),能够解决这个问题,但总觉得这个方法不是一个好的方法,请问是否还有更好的方法?谢谢!
解决方案 »
- VS有向导建立属性对话框作为主对话框吗?
- vc取大智慧软件里面的短线精灵数据
- 江湖教急!小弟想在COM中实现打印,请各位大大帮忙
- 在ocx中引入Frame/View结构过程中的一个小问题(Toolbar获得不到ON_UPDATE_COMMAND_UI消息)...
- 从Access数据库读出字符串为什么没有结束标志
- 多线程编程,怎么去调试? 好请高手们指点指点!
- SendMessage和SendNotifyMessage的区别?
- 无法获取GUI_EclipseView
- SDK中,如何给资源的图片控件设置位图?(位图在资源中)
- 关于搜索文件的问题,这只可以搜索根目录下的文件,但是不能搜索子目录中的文件,谁能解决
- 用VC 在PC机的Windows系统下,如何将按键改成自定义的功能?
- VS2005,修改文件名后,生成错误。
2.主线程 ON_THREAD_MESSAGE( message, memberFxn )
主线程在memberFxn函数中读取队列数据
当队列为空时调用ResetEvent,
收到数据SetEvent
不停的接收和发送的的话
用event的话
就是控制收到一定量后setevent
用两个子线程分别接收、处理。处理子线程,去读数据,读到就处理,处理完再sleep,读不到也sleep,只要能来得及处理就行了。
如接收了数据后设置event,或者发消息给主线程............
While(1)
{
WaitForSingleObject(hEvent);
... ...
}接收线程中。
接收到数据后。SetEvent(hEvent);这样就OK了。