J'ai un périphérique qui génère des messages via un port série. Lorsque je redémarre l'appareil, le port d'achèvement d'E/S s'arrête de lire les octets.GetQueuedCompletionStatus arrête de lire un port série
Le code est appelle GetQueuedCompletionStatus():
BOOL bRet = GetQueuedCompletionStatus(
m_hCompletionPort,
&dwBytesTransferred,
&dwCompletionKey,
&pOverlapped,
INFINITE);
PortMon ressemble:
...
IRP_MJ_WRITE Serial1 SUCCESS LENGTH: 7 REBOOT.
IRP_MJ_READ Serial1 CANCELLED LENGTH: 1
Logging montre le résultat suivant:
bRet=true, dwBytesTransferred=7, pOverlapped=0x0202B028, GetLastError()=997
(sleep forever)
Est-il possible de détecter cette échec et rétablir les communications?
Je peux surveiller un battement de chaleur et fermer/rouvrir le port série, mais il ne semble pas correct que l'API de Windows permette aux communications série de tomber silencieusement comme ceci.
Merci. J'essayais de gérer cela sans avoir à prendre en compte l'utilisation du port IO Completion, mais il semble que je n'ai pas beaucoup le choix. –
Vous avez le choix: Voir ma réponse! – janm