Использование перекрытой структуры для обратного вызова?

У меня есть собственная перекрывающаяся структура для асинхронного ввода-вывода с использованием портов завершения ввода-вывода.

Теперь я получаю уведомление о завершении чтения / записи. Могу ли я передать функцию CALLBACK в качестве параметра в перекрывающейся структуре?

Это позволит мне указать различные функции обратного вызова в зависимости от типа перекрытой структуры, которую я передал

Кому-нибудь повезло с этим?

0

Решение

Создайте свою собственную структуру, полученную из OVERLAPPED:

struct MyOverlapped : OVERLAPPED
{
CALLBACK MyCallback;
};

Теперь используйте это вместо:

MyOverlapped *o=new MyOverlapped;
o->MyCallback=CallbackHandler;

WriteFile(..,..,MyOverlapped);

Затем, когда вы получите OVERLAPPED назад вы можете привести его к вашей производной версии:

MyOverlapped *o=static_cast<MyOverlapped*>(overlapped);

И теперь вы можете получить доступ к обратному вызову. Я предполагаю, что вы получаете OVERLAPPED Экземпляр назад от звонка GetQueuedCompletionStatus где указатель, который вы получите обратно, будет фактически указывать на вашу производную структуру.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]