Condividi tramite


Funzione GetOverlappedResult (ioapiset.h)

Recupera i risultati di un'operazione sovrapposta nel file specificato, denominata pipe o dispositivo di comunicazione. Per specificare un intervallo di timeout o un'attesa in un thread avvisabile, usare GetOverlappedResultEx.

Sintassi

BOOL GetOverlappedResult(
  [in]  HANDLE       hFile,
  [in]  LPOVERLAPPED lpOverlapped,
  [out] LPDWORD      lpNumberOfBytesTransferred,
  [in]  BOOL         bWait
);

Parametri

[in] hFile

Handle al file, denominato pipe o dispositivo di comunicazione. Si tratta dello stesso handle specificato quando l'operazione sovrapposta è stata avviata da una chiamata a una delle funzioni seguenti:

[in] lpOverlapped

Puntatore a una struttura OVERLAPPED specificata all'avvio dell'operazione sovrapposta.

[out] lpNumberOfBytesTransferred

Puntatore a una variabile che riceve il numero di byte effettivamente trasferiti da un'operazione di lettura o scrittura. Per un'operazione TransactNamedPipe , si tratta del numero di byte letti dalla pipe. Per un'operazione DeviceIoControl , si tratta del numero di byte di dati di output restituiti dal driver del dispositivo. Per un'operazione ConnectNamedPipe o WaitCommEvent , questo valore non è definito.

[in] bWait

Se questo parametro è TRUE e il membro interno della struttura lpOverlapped è STATUS_PENDING, la funzione non restituisce fino al completamento dell'operazione. Se questo parametro è FALSE e l'operazione è ancora in sospeso, la funzione restituisce FALSE e la funzione GetLastError restituisce ERROR_IO_INCOMPLETE.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero.

Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError.

Commenti

I risultati segnalati dalla funzione GetOverlappedResult sono quelli dell'ultima operazione sovrapposta dell'handle specificato a cui è stata fornita la struttura OVERLAPPED specificata e per cui i risultati dell'operazione erano in sospeso. Un'operazione in sospeso è indicata quando la funzione che ha avviato l'operazione restituisce FALSE e la funzione GetLastError restituisce ERROR_IO_PENDING. Quando un'operazione di I/O è in sospeso, la funzione che ha avviato l'operazione reimposta il membro hEvent della struttura OVERLAPPED allo stato non firmato. Quando l'operazione in sospeso è stata completata, il sistema imposta l'oggetto evento sullo stato segnalato.

Se il parametro bWait è TRUE, GetOverlappedResult determina se l'operazione in sospeso è stata completata aspettando che l'oggetto evento sia nello stato segnalato.

Se il membro hEvent della struttura OVERLAPPED è NULL, il sistema usa lo stato dell'handle hFile per segnalare al termine dell'operazione. L'uso di file, pipe denominate o handle di dispositivi di comunicazione per questo scopo è sconsigliato. È più sicuro usare un oggetto evento a causa della confusione che può verificarsi quando vengono eseguite più operazioni sovrapposte simultanee sullo stesso file, la pipe denominata o il dispositivo di comunicazione. In questa situazione non è possibile sapere quale operazione ha causato il segnale dello stato dell'oggetto.

Esempio

Per un esempio che usa GetOverlappedResult, vedere Test per la fine di un file

Requisiti

   
Client minimo supportato Windows XP [app desktop | App UWP]
Server minimo supportato Windows Server 2003 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione ioapiset.h (include Windows.h in Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Libreria Kernel32.lib
DLL Kernel32.dll

Vedere anche

CancelIo, CreateEvent, GetOverlappedResultEx, OVERLAPPED, Input e output sovrapposti, Funzioni di sincronizzazione