小编Aar*_*otz的帖子

从I/O完成端口删除句柄以及有关IOCP的其他问题

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 sockets windows file iocp

7
推荐指数
2
解决办法
5510
查看次数

什么是C/C++中C_str()函数的用法

谁能告诉我C/C++中c_str()函数的用途是什么?在哪种情况下有必要使用它?

c++ stdstring c-str

3
推荐指数
2
解决办法
9614
查看次数

如何在VC++中获取函数的真实地址

我正在学习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

windows winapi dllimport visual-c++

2
推荐指数
1
解决办法
255
查看次数

从注册表中提取REG_MULTI_SZ值并存储在字符串数组c ++中

有一个REG_MULTI_SZ值,我想在一个字符串数组中,以便我的程序可以用它们做其他事情.我从来没有使用过C++来访问注册表,所以在按照一些例子后我有点迷失了.我正在使用VS10.

有一个简单的方法吗?谢谢.

c++ registry visual-studio-2010 visual-c++

2
推荐指数
1
解决办法
3472
查看次数