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:
- ReadFile
- WriteFile
- ConnectNamedPipe
- TransactNamedPipe
- Deviceiocontrol
- WaitCommEvent
- ReadDirectoryChangesW
- LockFileEx
[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