Bonjour,
J'ai une application qui communique avec un PC distant avec une liaison RS422.
Pour envoyer un message, j'ai la fonction suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 send (CMessage* i_message) { OVERLAPPED osWrite = {0}; int fRes = 0; DWORD dwWritten; osWrite.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); if (osWrite.hEvent == NULL) { return; } if (!WriteFile(m_PortHandle, i_message->m_data.data, i_message->m_data.length(), &dwWritten, &osWrite)) { if (GetLastError() != ERROR_IO_PENDING) { return; } else { if (!GetOverlappedResult(m_PortHandle, &osWrite, &dwWritten, TRUE)) { return; } else { if (dwWritten != i_message->m_data.length()) { // Time out écoulé sans pouvoir écrire les données return; } else { // Données écrites avec succées sur le port fRes = dwWritten; } } } } else { fRes = dwWritten; } CloseHandle(osWrite.hEvent); }
En plus, il faut que le durée de l'exécution de la fonction suivante ne dépasse pas le 20 millisec.
Mon question: Est ce que l'envoi sur la liaison série est bloquant?
Si oui comment je peux envoyer un message d'une façon non bloquante?
Merci pour vos réponses
Partager