Блоки GetOverlappedResults с bWait = false

GetOverlappedResults () не возвращается вообще.
Я запустил простой пример, приведенный ниже, и при изменении IP-адреса в сетевом интерфейсе устанавливается событие ручного сброса, и я вижу вывод «Таблица IP-адресов изменена ..», но GetOverlappedResults () не возвращается, даже если bWait имеет значение false , Даже при bWait = true он должен возвращаться, потому что событие установлено, поэтому операция ввода-вывода завершена.

Что здесь происходит?

#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <windows.h>

#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")

void main()
{
OVERLAPPED overlap;
DWORD ret, nr;
HANDLE hand = NULL;
overlap.hEvent = CreateEvent(NULL, true, false, NULL);

ret = NotifyAddrChange(&hand, &overlap);

for (;;)
{
if ( WaitForSingleObject(overlap.hEvent, INFINITE) == WAIT_OBJECT_0 )
{
printf("IP Address table changed..\n");
ret = GetOverlappedResult(hand, &overlap, &nr, false);
scanf_s("%d %d\n", ret, nr);
printf("done\n");
NotifyAddrChange(&hand, &overlap);
ResetEvent(overlap.hEvent);
}
}
}

0

Решение

Ожидание вызвано scanf_s(), Я думаю, ты хотел printf возвращаемое значение не читать его.

1

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


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