Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π Π°Π±ΠΎΡ‚Π° с COM ΠΈ LPT Π² Win32.Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 3

Автор ОлСг Π’ΠΈΡ‚ΠΎΠ²

baud=1200 parity=N data=8 stop=1

lpDCB

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡƒΡŽ структуру DCB. ΠŸΡ€ΠΈ этом структура Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΡƒΠΆΠ΅ создана ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π° нулями, ΠΊΡ€ΠΎΠΌΠ΅ поля DCBlength, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ использованиС ΡƒΠΆΠ΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎΠΉ структуры DCB, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎΠΉ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ чтСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠΎΡ€Ρ‚Π°.

Π’ случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ функция BuildCommDCB Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ случаС ошибки возвращаСтся 0.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ функция BuldCommDCB измСняСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ явно пСрСчислСныС Π² строкС lpDef поля. Однако ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ· этого ΠΏΡ€Π°Π²ΠΈΠ»Π°:

β€’ ΠŸΡ€ΠΈ Π·Π°Π΄Π°Π½ΠΈΠΈ скорости ΠΎΠ±ΠΌΠ΅Π½Π° 110 Π±ΠΈΡ‚ Π² сСкунду автоматичСски устанавливаСтся Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΎΠ±ΠΌΠ΅Π½Π° с двумя стоповыми Π±ΠΈΡ‚Π°ΠΌΠΈ. Π­Ρ‚ΠΎ сдСлано для совмСстимости с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ mode ΠΈΠ· MS-DOS ΠΈΠ»ΠΈ Windows NT.

β€’ По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ запрСщаСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ (XON/XOFF) ΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ поля DCB Ссли трСбуСтся ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ.

Ѐункция BuilCommDCB ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠ°ΠΊ Π½ΠΎΠ²Ρ‹ΠΉ, Ρ‚Π°ΠΊ ΠΈ старый Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки mode. Однако, Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ эти Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΉ строкС.

Новый Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ строки позволяСт явно Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ значСния для ΠΏΠΎΠ»Π΅ΠΉ DCB ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΡ… Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. ΠŸΡ€ΠΈ использовании старого Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ соглашСния:

β€’ Для строк Π²ΠΈΠ΄Π° 9600,n,8,1 (Π½Π΅ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ…ΡΡ символами x ΠΈΠ»ΠΈ p):

 β—‹ fInX, fOutX,fOutXDsrFlow, fOutXCtsFlow ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² FALSE

 β—‹ fDtrControl устанавливаСтся Π² DTR_CONTROL_ENABLE

 β—‹ fRtsControl устанавливаСтся Π² RTS_CONTROL_ENABLE

β€’ Для строк Π²ΠΈΠ΄Π° 9600,n,8,1,x (Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ…ΡΡ символом Ρ…):

 β—‹ fInX, fOutX ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² TRUE

 β—‹ fOutXDsrFlow,fOutXCtsFlow ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² FALSE

 β—‹ fDtrControl устанавливаСтся Π² DTR_CONTROL_ENABLE

 β—‹ fRtsControl устанавливаСтся Π² RTS_CONTROL_ENABLE

β€’ Для строк Π²ΠΈΠ΄Π° 9600,n,8,1,p (Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ…ΡΡ символом p):

 β—‹ fInX, fOutX ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² FALSE

 β—‹ fOutXDsrFlow,fOutXCtsFlow ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ TRUE

 β—‹ fDtrControl устанавливаСтся Π² DTR_CONTROL_HANDSHAKE

 β—‹ fRtsControl устанавливаСтся Π² RTS_CONTROL_HANDSHAKE

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ функция BuildCommDCB Ρ‚ΠΎΠ»ΡŒΠΊΠΎ заполняСт поля DCB ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ значСниями. Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ шаг ΠΊ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΠΎΡ€Ρ‚Π°, Π½ΠΎ Π½Π΅ само ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ выполняСтся рассматриваСмыми Π΄Π°Π»Π΅Π΅ функциями. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ BuildCommDCB для ΠΎΠ±Ρ‰Π΅Π³ΠΎ заполнСния структуры DCB, Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ значСния Π½Π΅ ΡƒΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Вас ΠΏΠΎΠ»Π΅ΠΉ, ΠΈ послС этого Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ конфигурирования ΠΏΠΎΡ€Ρ‚Π°.

Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ DCB ΠΌΠΎΠΆΠ½ΠΎ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ способом. Π’Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ GetCommState. Π­Ρ‚Π° функция заполняСт DCB ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ состоянии устройства, Ρ‚ΠΎΡ‡Π½Π΅Π΅ ΠΎ Π΅Π³ΠΎ настройках. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΎΠ½Π° выглядит:

BOOL GetCommState(HANDLE hFile, LPDCB lpDCB);

Ѐункция ΠΎΡ‡Π΅Π½ΡŒ проста ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ всСго Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

hFile

ΠžΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π°. Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ возвращаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ CreateFile. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎΡ€Ρ‚Π°, Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΅Π³ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ. Для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ BuildCommDCB это Π½Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ.

lpDCB

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° DCB. Для DCB Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½ Π±Π»ΠΎΠΊ памяти.

ΠŸΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ ошибкС Π½ΡƒΠ»ΡŒ. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎΡ€Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ настройкС.

Π—Π°ΠΏΠΎΠ»Π½ΠΈΠ² DCB ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊ собствСнно ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΠΎΡ€Ρ‚Π°. Π­Ρ‚ΠΎ дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SetCommState:

BOOL SetCommState(HANDLE hFile, LPDCB lpDCB);

Π­Ρ‚Π° функция ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠ°ΠΊ GetCommState. РазличаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. GetCommState считываСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… структур ΠΈ рСгистров ΠΏΠΎΡ€Ρ‚Π°, Π° SetCommState Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ заносит Π΅Π΅. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ остороТным ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SetCommState, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π΄Π°ΠΆΠ΅ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ°/ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π½Π΅ пусты, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ искаТСниС ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° Ρ‚ΠΎΠ½ΠΊΠΎΡΡ‚ΡŒ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ с ошибкой, Ссли поля XonChar ΠΈ XoffChar Π² DCB содСрТат ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ значСния.

Как всСгда, Π² случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ возвращаСтся ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ ΠΎΡ‚ нуля Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° Π² случаС ошибки – Π½ΡƒΠ»ΡŒ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π²Π°ΠΆΠ½ΠΎΠΉ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ структурой являСтся COMMTIMEOUTS. Она опрСдСляСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅. ЗначСния, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ полями этой структуры, ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ большоС влияниС Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ чтСния/записи.

typedef struct _COMMTIMEOUTS {

 DWORD ReadIntervalTimeout;

 DWORD ReadTotalTimeoutMultiplier;

 DWORD ReadTotalTimeoutConstant;

 DWORD WriteTotalTimeoutMultiplier;

 DWORD WriteTotalTimeoutConstant;

} COMMTIMEOUTS,*LPCOMMTIMEOUTS;

Поля структуры COMMTIMEOUTS ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ значСния:

ReadIntervalTimeout

МаксимальноС врСмя, Π² миллисСкундах, допустимоС ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ символами считываСмыми с ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ. Π’ΠΎ врСмя ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΎΡ‚ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ символа. Если ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ символами прСвысит Π·Π°Π΄Π°Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, опСрация чтСния Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΈ всС Π΄Π°Π½Π½Ρ‹Π΅, Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Ρ‹Π΅ Π² Π±ΡƒΡ„Π΅Ρ€Π΅, ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. НулСвоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ поля ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ MAXDWORD, вмСстС с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ значСниями ΠΏΠΎΠ»Π΅ΠΉ ReadTotalTimeoutConstant ΠΈ ReadTotalTimeoutMultiplier, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния с ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ ΡƒΠΆΠ΅ принятого символа, Π΄Π°ΠΆΠ΅ Ссли Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ ΠΈΠ· Π»ΠΈΠ½ΠΈΠΈ.

ReadTotalTimeoutMultiplier

Π—Π°Π΄Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ, Π² миллисСкундах, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для вычислСния ΠΎΠ±Ρ‰Π΅Π³ΠΎ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ умноТаСтся Π½Π° количСство Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Ρ‹Ρ… для чтСния символов.

ReadTotalTimeoutConstant

Π—Π°Π΄Π°Π΅Ρ‚ константу, Π² миллисСкундах, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ для вычислСния ΠΎΠ±Ρ‰Π΅Π³ΠΎ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ прибавляСтся ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ умноТСния ReadTotalTimeoutMultiplier Π½Π° количСство Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Ρ‹Ρ… для чтСния символов. НулСвоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ ReadTotalTimeoutMultiplier ΠΈ ReadTotalTimeoutConstant ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ.

WriteTotalTimeoutMultiplier

Π—Π°Π΄Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ, Π² миллисСкундах, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для вычислСния ΠΎΠ±Ρ‰Π΅Π³ΠΎ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ умноТаСтся Π½Π° количСство записываСмых символов.

WriteTotalTimeoutConstant

Π—Π°Π΄Π°Π΅Ρ‚ константу, Π² миллисСкундах, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ для вычислСния ΠΎΠ±Ρ‰Π΅Π³ΠΎ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ прибавляСтся ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ умноТСния WriteTotalTimeoutMultiplier Π½Π° количСство записываСмых символов. НулСвоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ WriteTotalTimeoutMultiplier ΠΈ WriteTotalTimeoutConstant ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ.

По Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Π°ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ вопросов. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΡŽ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅. ΠŸΡƒΡΡ‚ΡŒ ΠΌΡ‹ считываСм 50 символов ΠΈΠ· ΠΏΠΎΡ€Ρ‚Π° со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ 9600. ΠŸΡ€ΠΈ этом ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ 8 Π±ΠΈΡ‚ Π½Π° символ, Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎ чСтности ΠΈ ΠΎΠ΄ΠΈΠ½ стоповый Π±ΠΈΡ‚. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π° ΠΎΠ΄ΠΈΠ½ символ Π² физичСской Π»ΠΈΠ½ΠΈΠΈ приходится 11 Π±ΠΈΡ‚ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ стартовый Π±ΠΈΡ‚). 50 символов Π½Π° скорости 9600 Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ 50 * 11 / 9600 = 0.0572916 сСкунд, ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 57.3 миллисСкунды, ΠΏΡ€ΠΈ условии Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… символов. Если ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» ΠΌΠ΅ΠΆΠ΄Ρƒ символами составляСт ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа, Ρ‚.Π΅. 0.5 миллисСкунд, Ρ‚ΠΎ врСмя ΠΏΡ€ΠΈΠ΅ΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ 50 * 11 / 9600 + 49 * 0.0005 = 0.0817916 сСкунд, ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 82 миллисСкунды. Если Π² процСссС чтСния ΠΏΡ€ΠΎΡˆΠ»ΠΎ Π±ΠΎΠ»Π΅Π΅ 82 миллисСкунд, Ρ‚ΠΎ ΠΌΡ‹ Π²ΠΏΡ€Π°Π²Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка Π² Ρ€Π°Π±ΠΎΡ‚Π΅ внСшнСго устройства ΠΈ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ считываниС ΠΈΠ·Π±Π΅ΠΆΠ°Π² Ρ‚Π΅ΠΌ самым зависания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния. Аналогично сущСствуСт ΠΈ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ‚Π°ΠΌ-Π°ΡƒΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи.

Если Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ понятСн, Ρ‚ΠΎ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ ΠΏΡ€ΠΈ записи Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅Π΄ΠΎΡƒΠΌΠ΅Π½ΠΈΠ΅. Π’ самом Π΄Π΅Π»Π΅, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ? Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ! Π’Π½Π΅ΡˆΠ½Π΅Π΅ устройство ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. ΠŸΡ€ΠΈ этом ΠΏΡ€ΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅ питания Π²ΠΎ внСшнСм устройствС заставит ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. Если Π½Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ зависаниС ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния.

ΠžΠ±Ρ‰ΠΈΠΉ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ зависит ΠΎΡ‚ количСства ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния/записи символов ΠΈ срСднСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ мСТсимвольного ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°. Если символов ΠΌΠ½ΠΎΠ³ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 1000, Ρ‚ΠΎ Π½Π° ΠΎΠ±Ρ‰Π΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ колСбания Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Ρ‚Ρ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π° ΠΎΠ΄ΠΈΠ½ символ ΠΈΠ»ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ мСТсимвольного ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Ρ‹ Π² структурС COMMTIMEOUTS Π·Π°Π΄Π°ΡŽΡ‚ΡΡ двумя Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π°ΠΌΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° для вычислСния ΠΎΠ±Ρ‰Π΅Π³ΠΎ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ чтСния, выглядит Ρ‚Π°ΠΊ NumOfChar * ReadTotalTimeoutMultiplier + ReadTotalTimeoutConstant , Π³Π΄Π΅ NumOfChar это число символов Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Ρ‹Ρ… для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния.

Для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния, ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΠ±Ρ‰Π΅Π³ΠΎ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Π° Π½Π° всю ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, задаСтся Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ символами. Π’ΠΎΡ‡Π½Π΅Π΅ это ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π°Ρ‡Π°Π»Π°ΠΌΠΈ Π΄Π²ΡƒΡ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… символов. Π’ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈ врСмя ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ самого символа.