Hello, Sergei! You wrote to Dimmy Timchenko on Sun, 30 Jul 2006 20:58:21 +0400:
DT>> òÁÚÏÂÒÁÔØÓÑ ÂÙ Å? × ÜÔÏÍ ÄÕÒÁÃËÏÍ Overlapped I/O... üÔÏ ÖÅ ÎÁÄÏ, ÞÔÏ DT>> ÉÚ UART-Á ÐÒÏÞÉÔÁÔØ ÂÌÏË Ó ÂÕÆÅÒÉÚÁÃÉÅÊ, ÎÁÄÏ ÔÒÅÄÙ ÓÏÚÄÁ×ÁÔØ...
SP> íÅÎÑ ÄÒÕÇÏÅ ÉÚÕÍÉÌÏ - ÏËÁÚÙ×ÁÅÔÓÑ, ÎÅÌØÚÑ ÏÄÎÏ×ÒÅÍÅÎÎÏ × ÏÄÎÏÍ ÔÒÅÄÅ SP> ÞÉÔÁÔØ ÉÚ COM-ÐÏÒÔÁ, Á × ÄÒÕÇÏÍ - ÐÉÓÁÔØ × ÎÅÇÏ (ÐÒÉ ÐÒÏÓÔÏÍ I/O, ÎÅ SP> overlapped, Ó overlapped Õ ÍÅÎÑ ÎÅ È×ÁÔÉÌÏ ÄÕÈÕ ÒÁÚÏÂÒÁÔØÓÑ). SP> ðÒÉÈÏÄÉÔÓÑ ÓÅÍÁÆÏÒÁÍÉ ÒÁÚÇÒÁÎÉÞÉ×ÁÔØ ÄÏÓÔÕÐ Ë ÐÏÒÔÕ, ÉÎÁÞÅ ÇÌÀÞÎÙÅ SP> ÇÌÀËÉ Ô×ÏÒÑÔÓÑ.
÷ÐÏÌÎÅ ÅÓÔÅÓÓÔ×ÅÎÎÏÅ ÐÏ×ÅÄÅÎÉÅ. ðÅÒÅ×ÅÄÉ ÎÁ ÒÕÓÓËÉÊ ÓÌÏ×Ï overlapped. é ÎÅÞÅÇÏ Ó×ÅÒÈÅÓÔÅÓÓÔ×ÅÎÎÏÇÏ × ÜÔÏÍ ÒÅÖÉÍÅ ÎÅÔ, ÐÒÏÓÔÏ ÎÁÄÏ ÐÏÍÎÉÔØ Ï ÔÏÍ, ÞÔÏ ReadFile/WriteFile ÔÏÌØËÏ ÉÎÉÃÉÉÒÕÀÔ ÏÐÅÒÁÃÉÀ, Á Ï ÚÁ×ÅÒÛÅÎÉÉ ÓÉÇÎÁÌÉÚÉÒÕÅÔ Å×ÅÎÔ × ËÏÎÔÒÏÌØÎÏÍ ÂÌÏËÅ ÏÐÅÒÃÉÉ (OVERLAPPED). å×ÅÎÔÁ ÍÏÖÎÏ ÖÄÁÔØ WaitForSingleObject'ÏÍ ÉÌÉ GetOverlappedResult. åÓÌÉ × Ä×ÕÈ ÓÌÏ×ÁÈ, ÔÏ ÞÔÅÎÉÅ:OVERLAPPED ovrl;
ovrl.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); ReadFile(hPort, rxBuffer, length, &rdn, &ovrl); // úÁÐÕÓÔÉÌÉ ÏÐÅÒÁÃÉÀ GetOverlappedResult(hPort, &ovrl, &rdn, TRUE); // äÏÖÄÁÌÉÓØ ÏËÏÎÞÁÎÉÑ
úÁÐÉÓØOVERLAPPED ovrl;
ovrl.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); WriteFile(hPort, tx_buffer, pktlen, &wrtn, &ovrl); GetOverlappedResult(hPort, &ovrl, &portstat, TRUE);
äÌÑ ÏÐÅÒÁÃÉÊ ÞÔÅÎÉÑ É ÚÁÐÉÓÉ ÓÔÒÕËÔÕÒÙ OVERLAPPED ÄÏÌÖÎÙ ÂÙÔØ ÒÁÚÎÙÍÉ.SP> ëÁË ÍÏÖÎÏ ÂÙÌÏ ÔÁË ÎÁÐÉÓÁÔØ ÓÉÓÔÅÍÕ - ÕÍÁ ÎÅ ÐÒÉÌÏÖÕ...
ðÒÏÓÔÏ ÎÕÖÎÏ RTFM (× ÈÏÒÏÛÅÍ ÓÍÙÓÌÅ ÜÔÏÇÏ ÓÌÏ×Á). óÉÓÔÅÍÁ ÒÁÂÏÔÁÅÔ.SP> á ÅÝÅ ÏÄÉÎ ÐÒÉËÏÌ ÂÙÌ, ËÏÇÄÁ Ñ ÚÁÂÙÌ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÐÅÒÅÍÅÎÎÕÀ, SP> ÏÐÒÅÄÅÌÑÀÝÕÀ ÓËÏÒÏÓÔØ ÐÏÒÔÁ (×ÉÄÉÍÏ, ÔÁÍ ÂÙÌ ÎÏÌØ) - SP> ÐÒÉ ÏÔËÒÙÔÉÉ COM-ÐÏÒÔÁ Win2000 ÐÒÏÓÔÏ ÂÅÚ Ú×ÕËÁ ÐÅÒÅÚÁÇÒÕÖÁÌÁÓØ. SP> ôÏÖÅ ÎÁÄÏ ÂÙÌÏ ÐÏÓÔÁÒÁÔØÓÑ...
ðÉÓÁÔÅÌØ ÄÒÁÊ×ÅÒÁ ÐÏÓÔÁÒÁÌÓÑ. þÔÏ ÚÁ ËÏÍÐÏÒÔ ÂÙÌ? óÏ ÛÔÁÔÎÙÍÉ ÔÁËÉÈ ÐÒÏÂÌÅÍ ÎÅÔ.WBR, AVB