请教高手解决方法。1:问题一:
经过日志监测,发现了多个线程监测到同一个用户退出,当然,程序用互斥处理,所以真实只删除了一次。各位在开发的时候,有没有什么办法,避免多个线程监测到同一事件,而进行处理的方法?2:问题二:
给所有客户端广播的过程中,也发现奇怪问题。不知为何引发了GetQueuedCompletionStatus的dwBytesTransfered非0,而收到的Buffer却为空。
服务器端使用
for(iter = g_ClientContext.begin() ; iter != g_ClientContext.end(); ++iter){
if(b_FoodBroadCast==1){
if((*iter)->UserType ==1 && (*iter)->IsLogin == true){
if(p_wbuf->len != 256 && strlen(p_wbuf->buf) != 0){
nBytesSent = WSASend((*iter)->GetSocket(), p_wbuf, 1,&dwBytes, dwFlags, p_ol, NULL);
}
}
}
}
如下代码广播数据,引发了GetQueuedCompletionStatus的dwBytesTransfered非0,而收到的Buffer却为空。
各位有什么好的建议没有,分不够可以加。谢谢
经过日志监测,发现了多个线程监测到同一个用户退出,当然,程序用互斥处理,所以真实只删除了一次。各位在开发的时候,有没有什么办法,避免多个线程监测到同一事件,而进行处理的方法?2:问题二:
给所有客户端广播的过程中,也发现奇怪问题。不知为何引发了GetQueuedCompletionStatus的dwBytesTransfered非0,而收到的Buffer却为空。
服务器端使用
for(iter = g_ClientContext.begin() ; iter != g_ClientContext.end(); ++iter){
if(b_FoodBroadCast==1){
if((*iter)->UserType ==1 && (*iter)->IsLogin == true){
if(p_wbuf->len != 256 && strlen(p_wbuf->buf) != 0){
nBytesSent = WSASend((*iter)->GetSocket(), p_wbuf, 1,&dwBytes, dwFlags, p_ol, NULL);
}
}
}
}
如下代码广播数据,引发了GetQueuedCompletionStatus的dwBytesTransfered非0,而收到的Buffer却为空。
各位有什么好的建议没有,分不够可以加。谢谢
解决方案 »
- ListControl行颜色
- 用VC画直线的问题
- 如何实现鼠标上移到一个对话框里的控件上,对话框能获取该事件?顶者有分!!!!!!!
- PiggyXP(【小猪】●享受VC,享受网络版●) 没一个问题回答到位的,你以后还是别回答了
- 请教高手:WIN32中,软盘驱动器的参数放什么地方?
- 新手的问题
- 怎么用VC实现在面板上播放.PDF文件
- 远程创建对象错误:不能向注册表写入项
- 请问哪位大侠有编写dll的电子书或文档,帮帮小弟吗?
- 按F5键调试时"......has exited with code 2 (0x2)."什么意思?
- 如何不使用SetLayeredWindowAttributes,实现窗口不同部分,有不同的透明度? 可以再加100分!
- ::URLDownLoadToFile 说undeclared identifier?
其他线程需要使用则通过线程消息,线程同步来处理就像需要COM处理的系统一样,一个线程1个COM实例显然是不好的对于2~俺不清楚啦~
Vista和Win2008支持新的Pooling API更方便的实现线程池
感谢回复,的确是应该串行处理,用独立的线程来监视,将事件序列化。
to 僵哥:
谢谢
开发的时候,没有使用计数,看来是的确有必要,或者就用单独的线程来处理,使得处理串行化。或者就用计数的方法。问题二:内存溢出的概率比较小,GetLastError出现的值很奇怪,很多次的都不一样
昨晚上没有办法,重新写了三个模块,今天好多了,客户那边测试效果好多了希望能够稳定