该CreateIoCompletionPort功能允许创建新的I/O完成端口以及将文件句柄注册到现有I/O完成端口.
然后,我可以使用任何函数,如recv在套接字上或ReadFile在具有OVERLAPPED结构的文件上启动异步操作.
我必须检查函数调用是否同步返回,尽管它是用OVERLAPPED结构调用的,在这种情况下直接处理它.在另一种情况下,当ERROR_IO_PENDING返回时,我可以使用GetQueuedCompletionStatus在操作完成时通知的功能.
出现的问题是:
如何从I/O完成端口删除句柄?例如,当我向IOCP添加套接字时,如何删除已关闭的套接字?我应该用相同的完成键重新注册另一个套接字吗?
另外,有没有办法使调用始终通过I/O完成端口并且不同步返回?
最后,例如可以recv异步但send同步吗?例如,当实现一个简单的echo服务时:我可以等待recv新数据的异步但是send以同步方式响应,以便降低代码复杂性吗?在我的情况下,recv在处理第一个请求之前,我不会第二次.
如果ReadFile已经请求了异步,但在完成之前,WriteFile应该处理相同的文件.是否会ReadFile被错误消息取消,我必须在写入完成后立即重新启动读取过程?或者我必须ReadFile在写作之前手动取消?这个问题与通信设备结合产生; 因此,如果同时发生,写入和读取不应该出现问题.
谁能告诉我C/C++中c_str()函数的用途是什么?在哪种情况下有必要使用它?
我正在学习Win32API.我的程序有两个功能.我尝试在VC++中使用调试模式.我在调用dumy函数时设置了一个断点
void CALLBACK Dummy(){
printf("\n Hello Dummy Func!");
}
//////////////////////////////////////////////////////////////////////////
int _tmain(int argc, _TCHAR* argv[]){
(breakPoint) Dummy();
}
Run Code Online (Sandbox Code Playgroud)
当我调用dumy()函数时.程序跳转到地址012110D7作为流程代码
Dummy:
012110D7 jmp Dummy(12113A0h)
Run Code Online (Sandbox Code Playgroud)
虚拟函数的实际地址是12113A0h我的问题是如何获取虚函数的实际地址是12113A0h当我在发布模式下运行时问题解决了.这是我第一次加入StackOver流程.我希望每个人都能帮助我.谢谢 !!BUZZ
有一个REG_MULTI_SZ值,我想在一个字符串数组中,以便我的程序可以用它们做其他事情.我从来没有使用过C++来访问注册表,所以在按照一些例子后我有点迷失了.我正在使用VS10.
有一个简单的方法吗?谢谢.