C++ WaitForSingleObject提供的句柄无效

C++ WaitForSingleObject提供的句柄无效,c++,asynchronous,waitforsingleobject,C++,Asynchronous,Waitforsingleobject,WaitForsingleobject返回无效句柄,但我不明白为什么…我认为应该这样写: h=CreateFile("c:\\test.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_READONLY|FILE_FLAG_OVERLAPPED,NULL); OVERLAPPED ol2; memset(&ol2,0,sizeof(OVERLAPPED)); ol2.hEvent=

WaitForsingleobject返回无效句柄,但我不明白为什么…

我认为应该这样写:

h=CreateFile("c:\\test.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_READONLY|FILE_FLAG_OVERLAPPED,NULL);

    OVERLAPPED ol2;
    memset(&ol2,0,sizeof(OVERLAPPED));
    ol2.hEvent=CreateEvent(NULL,false,false,NULL);
    if(!ReadFile(h,iobuffer+pointsize,value,NULL,&ol2))
    printf("Last Error %u",GetLastError());
    if(WaitForSingleObject(&ol2.hEvent,INFINITE)!=0){
        printf("Last Error %u \n",GetLastError());

    }

请注意删除的&before ol2.hEvent

我认为应该写:

h=CreateFile("c:\\test.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_READONLY|FILE_FLAG_OVERLAPPED,NULL);

    OVERLAPPED ol2;
    memset(&ol2,0,sizeof(OVERLAPPED));
    ol2.hEvent=CreateEvent(NULL,false,false,NULL);
    if(!ReadFile(h,iobuffer+pointsize,value,NULL,&ol2))
    printf("Last Error %u",GetLastError());
    if(WaitForSingleObject(&ol2.hEvent,INFINITE)!=0){
        printf("Last Error %u \n",GetLastError());

    }

注意删除的&before ol2.hEvent

确实:
WaitForSingleObject
采用
HANDLE
,而不是
HANDLE[]
WaitForMultipleObjects
确实:
WaitForSingleObject
采用
HANDLE
而不是
WaitForMultipleObjects