1.当多个线程在套接字上执行I/O 操作时,应当避免重叠操作正在进行的时候释放了OVERLAPPED 结构,阻止其发生的最好方法是在每个套接字句柄上调用closesocket函数--------------所有未决的I/O 操作都会完成为什么?2.上述方法可以通过使用PostQueuedCompletionStatus函数向工作线程发送特定的完成封包来实现,这个完成封包通知工作线程立即退出发送什么样的封包呢?3.当工作线程接收GetQueuedCompletionStatus的3个参数时,可以决定是否退出。发送什么样的参数呢?dwCompletionkey传递0.其实这三个问题是一个问题,书上说的很模糊,我把它分开问,各位高手回答也方便一些,我也更容易理解一些,拜托了。
解决方案 »
- 关于fork()返回2次,个人觉得发在这里比linux区靠谱,求围观~
- 图片打包问题
- 我自己写的Directshow Filter,为什么图像是颠倒的?
- 有关网页提交数据时http客户端提交格式的问题
- 请高手来帮我看看,难道VC疯了吗?
- 用MSXML建立好了XML文本,怎么建立相应的XML文件,谢谢,我用了CFileDialog类
- 如何得到指定扩展名的文件的图标?(只知道扩展名,不是文件图标)
- 我想学习游戏编程不知道要学哪些知识?望赐教!
- FindFirstFile(Dlg.GetPathName(),&FindFileData)我有个小问题!(答了肯定给分)
- printf("")与cout<< 混用的问题
- 网页上使用activex控件时,弹出内存不能访问
- CToolTipCtrl的气球小问题~~
2,3:PostQueuedCompletionStatus(m_hCompletion, -1, 0, NULL);
BOOL bOK = ::GetQueuedCompletionStatus(m_hCompletion, &dwTrans, (LPDWORD)&dwKey, (LPOVERLAPPED*)&lpol, WSA_INFINITE);
if(dwTrans == -1) // 用户通知退出,你自己决定是对否退出
{}
2,3.是同一个问题。问题1当中这种理想做法很难实现,几乎是不可能实现。那么就只要做到不让后续的线程重复释放资源。做法就是先给每一个线程发送一个退出的通知,这个通知可以通过PostQueuedCompletionStatus带上特定的参数,当GetQueuedCompletionStatus收到特定的参数之后,就自行退出,而不再处理后续的通知。如此就可以避免了对野指针释放资源的问题。