Results 1 to 19 of 19
Hybrid View
-
20th November 2009 20:35 #1
Virtual COM port - ñèíõðîíèçèðàíå
Ìú÷à ñå äà ïðî÷åòà ïàìåòòà íà óñá óñòðîéñòâî ïðåç virtual COM port.
Âñè÷êî å òî÷íî, êàòî èçêëþ÷èìå ôàêòà, ÷å íå ìîãà äà ñå îïðàâÿ ñúñ ñèíõðîíèçèðàíåòî íà ïèñàíå / ÷åòåíå. Ó-âîòî ïðàùà äàííè, ñàìî ñëåä êàòî ñúì ìó ïðàòèë êîìàíäà, âèíàãè çíàì êàêúâ ðàçìåð äàííè äà î÷àêâàì. WaitForSingleObject è ïðîèçâîäíèòå ñà íîâîñò çà ìåíå è ÿâíî íÿêúäå ãðåøà, çàùîòî ñëåäíèÿò êîä íå ðàáîòè, êàêòî òðÿáâà:
Òîâà å èçâàäêà îò ôóíêöèÿòà, êÿòî ÷åòå îïðåäåëåí áðîé áàéòîâå.Code:OVERLAPPED ov = {0}; ov.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); LPBYTE szBuff = ( LPBYTE ) malloc( sizeof( BYTE ) * nBytesToRead ); if( szBuff == NULL ) { // exception memory allocation } DWORD dwBytesRead = NULL; BOOL bStat = ReadFile( m_hDevice, szBuff, nBytesToRead, &dwBytesRead, &ov ); if( !bStat ) { DWORD err = GetLastError(); if( err & ERROR_IO_PENDING ) { DWORD res = WaitForSingleObject( ov.hEvent, 2000 ); switch( res ) { case WAIT_TIMEOUT: // handle timeout break; case WAIT_OBJECT_0: // read is complete break; default: // do something break; } } else { // handle unexpected error } } return szBuff;
Ïðîáëåìúò å ñëåäíèÿ: bStat âèíàãè å TRUE, âúïðåêè ÷å ReadFile íèùî íå å ïðî÷åëà. Ïðîñòî âñè÷êî ñòàâà ïðåêàëåíî áúðçî è ÿâíî óñá ó-âîòî îùå íå å ãîòîâî ñ äàííèòå. ReadFile îïèòâà äà ÷åòå è âìåñòî äà çàïî÷íå àñèíõðîííî ÷åòåíå è äà âúðíå FALSE, âðúùà TRUE è 0 ïðî÷åòåíè áàéòîâå. Àêî òî÷íî ïðåäè ReadFile ñëîæà Sleep( 100 );, äàííèòå ñà âå÷å â áóôåðà è ReadFile çàïî÷âà ÷åòåíå, êàêòî ñå î÷àêâà.
Ôóíêöèÿòà ÿ âèêàì âåäíàãà ñëåä êàòî å ïðàòåíà óñïåøíî îïðåäåëåíà êîìàíäà äî ó-âîòî ( ïðèìåðíî äà ìè ïðàòè ñåðèåí íîìåð ). Ïèñàíåòî åñòåñòâåíî ñúùî å overlapped è òàì íÿìà ïðîáëåìè. Íå ðàçáèðàì êàê äà íàêàðàì ReadFile äà ÷àêà, äîêàòî íå ñå ïîÿâÿàò îïðåäåëåíèÿ áðîé áàéòîâå.
Ïðîáâàõ ñúùî è ñúñ SetCommMask è ñ WaitCommEvent äà ÷àêàì çà EV_RXCHAR... îòíîâî áåç ðåçóëòàò - WaitCommEvent âúîáùå íå ñïèðà è âðúùà 0x00
.
Êàê ñå ÷åòå îò ïóñò ñåðèåí ïîðò, íÿêîé ìîæå ëè äà ïîìîãíå?
×åòîõ ñòàòèè, ôîðóìè... íå ìîæàõ äà ãî ïîäêàðàì.
-
20th November 2009 20:47 #2
sleep(100);
ReadFile( m_hDevice, szBuff, nBytesToRead, &dwBytesRead, NULL);
Have no fear ike iz here.
CPU Cx486DLC@40MHz, RAM 4MB, VGA Trident 512KB, HDD Conner 160MB, Monitor 14" Color
-
20th November 2009 21:13 #3
È non-overlapped ñúì ãî òåñòâàë - ðàáîòè, íî äîñòà ïî-áàâíî.
È èñêàì äà ãî íÿìà òîçè sleep. Ñàìî îò íåãî 13 ìèíóòè ÷àêàíå.
Êîíêðåòíî çàäà÷àòà ìè å äà èçâèêàì 8000 ïúòè WriteFile/ReadFile çà ìèíèìàëíî âðåìå.
À â ìîìåíòà ñ òîçè Sleep íàïðàâî ñè å íåèçïîëçâàåìî
Ïúê è íå å ñèãóðíî òàêà - êàêâî ïðàâèìå, àêî óñá óñòðîéñòâîòî ñå çàáàâè 101 ìñ
.
-
20th November 2009 21:35 #4Registered User
Join Date: Dec:2007
Location: Sofia
Posts: 366
Ïîêàæè öÿëàòà ôóíêöèÿ, ñàìî îò òàçè èçâàäêà íå ìîæå äà ñå ïðåöåíè êàêâî íå å íàðåä. Íàïðèìåð, êàê ñè îòâîðèë óñòðîéñòâîòî çà ÷åòåíå?
Ïðîâåðè â äîêóìåíòàöèÿòà íà ReadFile() http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx êàêâè ñà èçèñêâàíèÿòà çà overlapped IO.
-
20th November 2009 22:35 #5Have no fear ike iz here.
CPU Cx486DLC@40MHz, RAM 4MB, VGA Trident 512KB, HDD Conner 160MB, Monitor 14" Color
-
20th November 2009 22:51 #6Registered User
Join Date: Oct:2003
Location: Ñîôèÿ
Posts: 4,317
Êàòî ÷åòà òóê:
http://msdn.microsoft.com/en-us/libr...71(VS.85).aspx ,
ïðè îïðåäåëåíà êîìáèíàöèÿ îò òàéìàóòè ÷åòåíåòî ìîæå äà âðúùà äàííè âåäíàãà, êîëêîòî ãè èìà â áóôåðà, âêëþ÷èòåëíî è 0 áàéòà. Äà íå áè äà ñå ñëó÷âà íåùî ïîäîáíî?
-
21st November 2009 12:54 #7
Äà, òàéìèíãèòå íàðî÷íî ñúì ãè íàïðàâèë, òàêà ÷å ReadFile äà âðúùà âåäíàãà, íî ìèñëåõ, ÷å â àñèíõðîíåí ðåæèì âðúùà FALSE è ñëåä òîâà ïðîñòî òðÿáâà äà èç÷àêàì, äîêàòî ov.hEvent íå å ñèãíàëèçèðàí, ÷å ÷åòåíåòî å ïðèêëþ÷åíî.
Íÿìàì ãî çà ñúæàëåíèå ñîðñ êîäà ïðè ìåí â ìîìåíòà, íî òîâà å ïî÷òè öÿëàòà ôóíêöèÿ, êîÿòî ÷åòå... èìà ìàëêî ïðîìåíëèâè, êîèòî ñå èíèöèàëèçèðàò.
OVERLAPPED ñòðóêòóðàòà íå å ëîêàëíà ïðîìåíëèâà, à èìàì äâå ñòðóêòóðè... åäíà çà ÷åòåíå è åäíà çà ïèñàíå, êîèòî ñà ÷ëåíîâå íà êëàñà.... ñëîæèõ ãî òóê, çà äà ñå âèäè êàê ãè èíèöèàëèçèðàì, çàùîòî â MSDN ïèøå, ÷å íåâàëèäíà OV ñòðóêòóðà ìîæå äà äîâåäå òî÷íî äî òàêîâà ïîâåäåíèå - âúðùà âåäíàãà TRUE ñ 0 ïðî÷åòåíè áàéòà.
@Bombera: Íå áÿõ îáúðíàë âíèìàíèå íà òàçè ãðåøêà ... ùå ãî îïðàâÿ, ìàêàð ÷å êàêòî òè êàçà, åäâà ëè èìà íà÷èí ReadFile äà âúðíå ERROR_COLORSPACE_MISMATCH
.
Íî ïî ïðèíöèï ñè ïðàâ, ÷å å èçòî÷íèê çà ïðèÿòíè ãðåøêè ïîäîáíî ñðàâíåíèå
@ike: Ùå ãî òåñòâàì òîçè âàðèàíò ...
-
20th November 2009 22:51 #8
Äàé öÿëàòà ôóíêöèÿ, ÷å òóê óñëîâèÿòà ñà ìíîãî.
Îò äîêóìåíòàöèÿòà íà ReadFile:
Îïà, ïðåâàðè'à ìà...!When reading from a communications device, the behavior of ReadFile is governed by the current communication time-out as set and retrieved by using the SetCommTimeouts and GetCommTimeouts functions. Unpredictable results can occur if you fail to set the time-out values. For more information about communication time-outs, see COMMTIMEOUTS.
Ï.Ñ.
Íàäÿâàì ñå, ñè íàÿñíî, ÷å òîâà:
ñå åâàëþèðà äî true ïðè 2021(ERROR_COLORSPACE_MISMATCH, íÿìà êàê äà ñå ïîëó÷è òóê, äà, íî âñå ïàê) è å ïîòåíöèàëíà ãðåøêà.if( err & ERROR_IO_PENDING )Last edited by Bombera; 20th November 2009 at 23:21.
EVGA X299 FTW K|i9-7960X@4.7|4x8 Patriot Viper Steel 4000|GTX 1660 Ti|970 EVO 1 TB|Seasonic Focus GX-1000|Xigmatek Elysium|Êèëî è ïîëîâèíà âîäà
Rampage IV Extreme BE|E5-1680v2@4.7|4x4 HyperX 1866|Cougar Aqua 240|GTX 1050 Ti|970 EVO 1/4 TB|CM 850 SilentPro|HAF-X|Áåç èñòèíñêî âîäíî
-
21st November 2009 13:06 #9
Àç èñêàõ äà âèäÿ êàê îòâàðÿø COM ïîðòà, CreateFile. Íàëè å îòâîðåí ñ FILE_FLAG_OVERLAPPED? Îñâåí òîâà, èñêàõ äà âèäÿ êàê ñå âúðòè öèêúëà, ðèçåòâà ëè ñå èâåíòà, òúé êàòî òîçè å manual-reset, âèíàãè ëè èíèöèàëèçèðàø ïðàâèëíî OVERLAPPED, çà äà ÷åòå îò ïúðâè áàéò, äà îáìèñëèì çà auto-reset event, êîéòî å ïî-áúðç è ò.í, äà çàìåíèì WaitForSingleObject ñ GetOverlappedResult, çàùîòî ïàê å ïî-áúðçà, äà îáìèñëèì ReadFileEx ñ àñèíõðîíåí êîëáåê, âìåñòî ReadFile, çàùîòî ïàê å ïî-áúðç
è ò.í.
EVGA X299 FTW K|i9-7960X@4.7|4x8 Patriot Viper Steel 4000|GTX 1660 Ti|970 EVO 1 TB|Seasonic Focus GX-1000|Xigmatek Elysium|Êèëî è ïîëîâèíà âîäà
Rampage IV Extreme BE|E5-1680v2@4.7|4x4 HyperX 1866|Cougar Aqua 240|GTX 1050 Ti|970 EVO 1/4 TB|CM 850 SilentPro|HAF-X|Áåç èñòèíñêî âîäíî
-
21st November 2009 13:11 #10
CreateFile å îòâîðåí ñ FILE_FLAG_OVERLAPPED. WriteFile ñè ïèøå àñèíõðîííî áåç ïðîáëåìè. Event-à ñúùî ãî ðåñåòâàì - çàáðàâèë ñúì äà ãî íàïèøà òóê...
Åäâà â ïîíåäåëíèê ùå ìîãà äà ïîñòíà êîäà, à äî òîãàâà ùå ïîïðî÷åòà çà ReadFileEx, çàùîòî "ïî-áúðçà" çâó÷è äîáðå
-
21st November 2009 13:24 #11
Äà òå ïðåäóïðåäÿ çà åäèí ïîòåíöèàëåí ïðîáëåì, ìàêàð ÷å OVERLAPPED íå òè å ëîêàëíà. Àêî èçëåçåø îò ôóíêöèÿòà ïðåäè äà å çàâúðøèëà àñèíõðîííàòà îïåðàöèÿ è OVERLAPPED e ëîêàëíà èëè ïî íÿêàêúâ äðóã ïîâîä ÿ îñâîäîáèø òàçè ïàìåò, çàåòà îò OVERLAPPED è èìà ïåíäèíã îïåðàöèÿ, ïðîãðàìàòà ìîæå äà ïî÷íå äà ãúðìè â äúëáèíèòå ñè. Çà äà ãî èçáåãíåø, ñïèðàò/îòêàçâàò ñå àñèíõðîííèòå çàÿâêè íà òåêóùèÿ òðåä ñ CancelIO è òîãàâà ìîæå äà îñâîáîäèø ñòðóêòóðàòà. Òîâà ÌÑ íå ãî îáÿñíÿâàò íèêúäå, íàó÷èõ ãî ïî òðóäíèÿ íà÷èí

ReadFileEx íå å ïî-áúðçà, àêî ñå ïîëçâà àíàëîãè÷íî. Èìàõ ïðåäâèä ñëó÷àÿ ñ ïîëçâàíå OVERLAPPED_COMPLETION_ROUTINE. Òàçè ïðîöåäóðà ñå èçïúëíÿâà êàòî àñèíõðîííà ïîòðåáèòåëñêà ïðîöåäóðà, â êîíòåêñòà íà òðåäà, êîéòî ÿ å ñêåäæóëíàë. Çà äà ñå èçïúëíè òàêàâà ïðîöåäóðà/ïðîöåäóðè, òðåäà ñå ñëàãà â àëåðòàáúë ñòåéò ñúñ SleepEx èëè WaitXXXXEx è ùå áúäå ñúáóäåí ïðè çàâúðøâàíå íà I/O îïåðàöèÿ. Òúé êàòî â òîçè ñëó÷àé ñå ïîääúðæàò îòäåëíè ñòðóêòóðè çà îáõîæäàíå îò I/O ìåíèäæúðà, òîé ìîæå äèðåêòíî äà ñèãíàëèçèðà òðåäà, áåç äà ãî ïðàâè ïðåç ñêåäæóëúðà, ñ äâå äóìè. Îñâåí òîâà òðåäîâåòå â àëåðòàáúë ñòåéò ñå îáõîæäàò îò íåãî ïðèîðèòåòíî. Îòòàì èäâà ñêîðîñòòà. Êîãàòî òðåäúò å â òàêúâ ðåæèì, òîé âñå åäíî å îòáåëÿçàí êàòî òàêúâ äà ñå ïðîâåðè ïúðâè äàëè äà áúäå ïóñíàò çà ðàáîòà.
Ñèãóðåí ëè ñè, ÷å ïèñàíåòî è ÷åòåíåòî íå ñè ïðå÷àò íÿêàê ñè? íå çíàì êàêâà å ëîãèêàòà íà ðàáîòà íà ïðèëîæåíèåòî.Last edited by Bombera; 21st November 2009 at 13:38.
EVGA X299 FTW K|i9-7960X@4.7|4x8 Patriot Viper Steel 4000|GTX 1660 Ti|970 EVO 1 TB|Seasonic Focus GX-1000|Xigmatek Elysium|Êèëî è ïîëîâèíà âîäà
Rampage IV Extreme BE|E5-1680v2@4.7|4x4 HyperX 1866|Cougar Aqua 240|GTX 1050 Ti|970 EVO 1/4 TB|CM 850 SilentPro|HAF-X|Áåç èñòèíñêî âîäíî
-
21st November 2009 14:25 #12
Àìè ëîãèêàòà å ñëåäíàòà:
Èìàì êëàñ ComInterface, êîéòî ñå çàíèìàâà ñ îòâàðÿíåòî íà ó-âîòî, ïèñàíåòî, ÷åòåíåòî - Open, ReadData, WriteData...
Êîäúò ïî-ãîðå å ÷àñò òî÷íî îò ReadData.
Òîçè êëàñ ComIntervace ñå ïîëçâà â äðóã UsbDevice, êîéòî âå÷å èìïëåìåíòèðà êîíêðåòíî òîâà ó-âî. Òàì èìà ôóíêöèÿ MakeRequest, êîÿòî ïðèåìà LPBYTE ñ 8 áàéòà, êîèòî ñà êîìàíäàòà äî ó-âîòî, è âðúùà LPBYTE ñ îòãîâîðà, êàòî ñàìàòà ôóíêöèÿ ñå ãðèæè çà âàëèäíîñò íà èíôîðìàöèÿòà - ïðîâåðÿâà äúëæèíà, CRC è ò.í.
Òà â òàçè ôóíêöèÿ âèêàì ïúðâî WriteData, ÷àêàì äà âúðíå ðåçóëòàò, ñëåä òîâà âèêàì ReadData. Ñàìî ÷å â ìîìåíòà òîâà ðàáîòè, ñàìî àêî ìåæäó âèêàíåòî íà WriteData è ReadData èìà Sleep( 100 );
Àêî ãî íÿìà, ñå ñëó÷âà ãîðíîòî - âðúùà ìè 0 ïðî÷åòåíè áàéòà, êàòî âúîáùå íå âëèçà â IO_PENDING, çàùîòî ReadFile âðúùà TRUE.
-
21st November 2009 15:26 #13
Íàëè òîâà å ñèòóàöèÿòà, êîÿòî èñêàø äà èìàø:
Îòòóê å.If an application sets ReadIntervalTimeout and ReadTotalTimeoutMultiplier to MAXDWORD and sets ReadTotalTimeoutConstant to a value greater than zero and less than MAXDWORD, one of the following occurs when the ReadFile function is called:
* If there are any bytes in the input buffer, ReadFile returns immediately with the bytes in the buffer.
* If there are no bytes in the input buffer, ReadFile waits until a byte arrives and then returns immediately.
* If no bytes arrive within the time specified by ReadTotalTimeoutConstant, ReadFile times out.
Ïðîñòî ÷åòåø è ÷àêàø äà ñå ñúáåðàò íóæíèÿ òè áðîé áàéòîâå, êàòî çàïàçâàø ïðî÷åòåíèòå â ìåæäèíåí áóôåð.
Íå ìèñëÿ, ÷å ìîæåø äà î÷àêàø äà èìàø âðúùàíå ñàìî ïðè òî÷íî îïðåäåëåí áðîé áàéòîâå, êîèòî ñè çàðú÷àë äà ñå ÷åòàò, ïðè àñèíõðîííî ÷åòåíå. Òîâà íå ñòàâà íà íèòî åäíî àñèíõðîííî óñòðîéñòâî - íèòî ìåéëñëîò, íèòî íà ñòðèéìèíã ïàéï(íà ìåñèäæ ïàéï ñòàâà), íèòî ñîêåò(òóê ñúùî íå ïîìíÿ), íèòî íà ôàéë(òóê îáèêíîâåíî çíàåø äîêúäå ñè ÷åë è êîëêî äà ïðî÷åòåø, òúé êàòî èìàø äîëíèÿ ëèìåñ, êàêòî è ñèñòåìíà èíäèêàöèÿ çà íàëè÷èåòî ìó(EOF) - ãîëåìèíàòà íà ôàéëà(êîéòî ïàê ìîæå äà áúäå íåïîñòîÿíåí)). Äîáðà ïðàêòèêà å äà íå î÷àêâàø äà ïîëó÷èø êîëêîòî ñè çàðú÷àë, òúé êàòî, ñåùàø ñå, òå ìîæå äà íå äîéäàò íèêîãà òîëêîâà, ÷å äà ãè ïîëó÷èø. Çàòîâà å è òîçè ìåõàíèçúì ñ òàéìàóòèòå. Ïîìàãà òè äà ðàçáåðåø êîãà èìà çàáàâÿíå â ïîòîêà åäèí âèä. Íå ñå çàìèñëÿì äúëáîêî, àìà êàêâî ñòàâà, àêî ÷àêàíåòî òàéìàóò-íå ïî íÿêàêâà ïðè÷èíà, à èìàø áàéòîâå â áóôåðà, äà ðå÷åì îò íåäîâúðøåí ïàêåò äàííè(í-òå áàéòà, êîèòî ÷àêàø äà ñå ñúáåðàò). Òå ìîæå îñòàíàò â áóôåðà íåïðî÷åòåíè, è ùå òè áúäàò âúðíàòè â ñëåäâàùî ÷åòåíå è ëîãèêàòà ñå îáúðêâà. Ðàçáèðà ñå, ìîæå äà èìïëåìåíòèðà êîíòðîëåí ìåõàíèçúì, íî å ïîâå÷å èãðà÷êà îò ðåäåíå íà êàêâîòî è äà ñè ïðî÷åë â ìåæäèíåí áóôåð.
Àç áèõ íàãëàñèë òàéìàóòèòå íà ïîðòà êàêòî ñà ïî-ãîðå, ïîíå òîâà å äåôèíèðàíî ïîâåäåíèå è áèõ ïîëçâàë ìåæäèíåí áóôåð, ïîçâîëÿâàù äà ñå îòõâúðëÿò è äèôåðåíöèðàò íåäîâúðøåíè ïàêåòè(åâåíòóàëíî).
Çàâúðòè ðèéä-à â öèêúë ïðîñòî, çàåäíî ñ wait-a, äîêàòî äîéäàò òîëêîâà áàéòà, êîëêîòî òè òðÿáâàò è ãî áðåàêâàé íà òàéìàóò. Ïðè òàéìàóò(òîçè, äåòî å 2000) ïàêåòà ìîæå äà ñå ñ÷èòà íåâàëèäåí çà öåëèòå òè, ïîíå òàêàâà å ëîãèêàòà, êàê ùå ãî èíòåðïåðåòèðàø òàéìàóòà å îòäåëåí âúïðîñ.
Òè êàê òî÷íî ñè íàãëàñèë òàéìàóòèòå íà ïîðòà, ïîìíèø ëè?
Àêî çàìåíèø èâåíòà ñ autî-reset, ùå ñè ñïåñòèø ãàëèìàöèèòå ïî ðèçåòâàíåòî ìó è ùå å ïî-áúðçî. Manual-reset â ñëó÷àÿ íÿìà ñìèñúë, ïîíåæå ÷àêàø ñàìî ñ åäèí òðåä íà íåãî.Code:OVERLAPPED ov = {0}; HANDLE hEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); LPBYTE szBuff; if((szBuff = (LPBYTE) malloc(sizeof(BYTE) * nBytesToRead )) == NULL ){ } BOOL bStat; DWORD dwBytesRead = 0; DWORD dwOffset = 0; DWORD dwTotalBytesToRead = nBytesToRead; BOOL fBreak = FALSE; ov.hEvent = hEvent; //Âàðèàíò 1 while(TRUE){ bStat = ReadFile( m_hDevice, szBuff + uOffset, nBytesToRead, &dwBytesRead, &ov ); if(bStat || ((err = GetLastError) == ERROR_IO_PENDING)){ DWORD res = WaitForSingleObject( ov.hEvent, 2000); switch(res){ case WAIT_TIMEOUT: // handle timeout // preglevda se ov.Internal - STATUS_PENDING moze da e, operacita ne e gotowa. Ako trqbwa da se izlee na wsqka cena - CancelIO break; case WAIT_OBJECT_0: nBytesToRead -= dwBytesRead; // signed - unsigned srawnenie predpolagam! dwOffset += dwBytesRead; if(dwOffset == dwTotalBytesToRead) fBreak = TRUE; else{ ResetEvent(ov.hEvent); ZeroMemory(ov, sizeof(OVERLAPPED)); // che po lesno ov.hEvent = hEvent; } break; } if(fBreak) break; } else break;// indicate error here } // Âàðèàíò 2 while(TRUE){ bStat = ReadFile( m_hDevice, szBuff + uOffset, nBytesToRead, &dwBytesRead, &ov ); if(bStat || ((err = GetLastError) == ERROR_IO_PENDING)){ DWORD res = SleepEx(2000, TRUE);// Òóê ñúñ ñúùèÿ óñïåõ ìîæå äà ñå ïîëçâà GetOverlappedResult, íî íå ìîæå äà ñå óêàæå òàéìàóò switch(res){ case 0: // handle timeout // preglevda se ov.Internal - STATUS_PENDING moze da e, operacita ne e gotowa. Ako trqbwa da se izlee na wsqka cena - CancelIO break; case WAIT_IO_COMPLETION: nBytesToRead -= dwBytesRead; // signed - unsigned srawnenie predpolagam! dwOffset += dwBytesRead; if(dwOffset == dwTotalBytesToRead) fBreak = TRUE; else{ ResetEvent(ov.hEvent); ZeroMemory(ov, sizeof(OVERLAPPED)); // che po lesno ov.hEvent = hEvent; } break; } if(fBreak) break; } else break;// indicate error here } CloseHandle(hEvent); if(dwOffset == 0){ free(szBuff); return NULL; } return szBuff;Last edited by Bombera; 22nd November 2009 at 12:39.
EVGA X299 FTW K|i9-7960X@4.7|4x8 Patriot Viper Steel 4000|GTX 1660 Ti|970 EVO 1 TB|Seasonic Focus GX-1000|Xigmatek Elysium|Êèëî è ïîëîâèíà âîäà
Rampage IV Extreme BE|E5-1680v2@4.7|4x4 HyperX 1866|Cougar Aqua 240|GTX 1050 Ti|970 EVO 1/4 TB|CM 850 SilentPro|HAF-X|Áåç èñòèíñêî âîäíî
-
22nd November 2009 12:29 #14
-
22nd November 2009 12:42 #15
Çíà÷è ñàìî ñëîæè ReadTotalTimeoutConstant äà å ïî-ãîëÿìî îò íóëà è ïî-ìàëêî îò MAXDWORD, çà äà ñå ïîëó÷è öèòèðàíîòî ïîâåäåíèå.
Ñëîæèõ äðåáíè êîðåêöèè, êîçìåòè÷íè, â êîäà.
Íåùî íå î÷àêâàì äà òðúãíå îäìà, ìà äàíî ñà ñàìî ëîøè ïðåä÷óâñòâèÿ
EVGA X299 FTW K|i9-7960X@4.7|4x8 Patriot Viper Steel 4000|GTX 1660 Ti|970 EVO 1 TB|Seasonic Focus GX-1000|Xigmatek Elysium|Êèëî è ïîëîâèíà âîäà
Rampage IV Extreme BE|E5-1680v2@4.7|4x4 HyperX 1866|Cougar Aqua 240|GTX 1050 Ti|970 EVO 1/4 TB|CM 850 SilentPro|HAF-X|Áåç èñòèíñêî âîäíî
-
22nd November 2009 12:48 #16
Àç ñúì òàêà èëè èíà÷å íà ïðèíöèïà "Àêî òðúãíå îò ïúðâèÿ ïúò, çíà÷è èìà íÿêàêúâ ïðîáëåì"
-
23rd November 2009 16:18 #17
@Bombera: Íàïðàâèõ ãî ïî âàðèàíò 1, íî íå âúðâè ïðè ïî-äúëãèòå ïàêåòè.
Àêî èçïðàòÿ êîìàíäà, êîÿòî èçèñêâà êðàòúê îòãîâîð ( 8 èëè 12 áàéòà ), âñè÷êî å òî÷íî.
Íî çàïî÷íà ëè ñúùèíñêîòî ñâàëÿíå íà èíôîðìàöèÿ, óñòðîéñòâîòî ïðàùà ïàêåòè îáùî ïî 1058 áàéòà. Çàïî÷âà äà ÷åòå è ïî íÿêîå âðåìå ReadFile ãúðìè ñ ãðåøêà
Âúïðåêè âñè÷êî óñïÿõ äà ãî ïîäêàðàì ïî äðóã íà÷èí - ïðåäè èçîáùî äà âèêàì ReadFile, ÷àêàì íóæíèòå áàéòîâå äà ñå ñúáåðàò â áóôåðà ïî ïîäîáåí íà÷èí:Code:ERROR_NOACCESS 998 (0x3E6) Invalid access to memory location.
Ñëàãàì ãî, êàêòî êàçàõ ïðåäè äà âèêíà âåäíúæ ReadFile. Íóæäà îò while( TRUE ) íÿìà.Code:COMSTAT ComStat = {0}; ClearCommError( m_hDev, &dwErrorFlags, &ComStat ); // Wait for the data to arrive while( ComStat.cbInQue < dwBytesToRead )//( DWORD ) nLimit { ClearCommError( m_hDev, &dwErrorFlags, &ComStat ); //cout << ComStat.cbInQue << endl; Sleep( 1 ); }
Ðàáîòè äîñòà äîáðå, äîñåãà íå ñúì çàáåëÿçàë íÿêàêâè ïðîáëåìè ... ÷å äàæå è îò ñêîðîñòòà ñúì äîâîëåí - êàòî ìàõíàõ Sleep( 100 ); òðúãíà äîñòà ïî-áúðçî
.
Äàëè å äîáðî è ñèãóðíî ðåøåíèå - íÿìàì èäåÿ... âèäÿõ â åäèí ôîðóì ïðåäëîæåíèå çà ïîäîáåí êàòî ìîÿ ïðîáëåì è òî âçå ÷å ñòàíà.
Íî åäíî íåùî íàó÷èõ ñúñ ñèãóðíîñò - ñåðèåí ïîðò äà ñèíõðîíèçèðàø ñè å åâ@ëî ì@éê@ò@
-
23rd November 2009 16:44 #18
Êàçâàø, àêî çàäàäåø 1058 áàéòà çà ÷åòåíå, ñ òîëêîâà ãîëÿì è çàäåëåí áóôåð, ãúðìè? À ñëåä êîëêî áàéòà ïðî÷åòåíè ãúðìè? Òîâà å ïðîáëåì íà íàøèÿ áóôåð, íå íà ReadFile. Ìîæå áè èñêà àëàéíìúíò íà áëîêà ïàìåò çà áóôåðà íà 4 áàéòà, òîãàâà âìåñòî malloc, òðÿáâà äà å ñ VirtualAlloc, èëè ïî-ïðîñòî, ãîëåìèíàòà íà áóôåðà äà å êðàòíà íà 8, íàé-áëèçêà, íî ïî-ãîëÿìà èëè ðàâíà íà æåëàíèÿ ðàçìåð. Íàìèðàø ñëåäâàùèÿ êðàòåí íà 4 àäðåñ îò ïîëó÷åíèÿ ïðè çàäåëÿíåòî è òîé ñòàâà íà÷àëî íà áóôåðà, à íàêðàÿ èìàø 4 ðåçåðâíè áàéòà, êîèòî ùå ñà êàòî ïðîäúëæåíèå, ñëåä èçìåñòâàíåòî äî êðàòåí íà 4 àäðåñ íà íà÷àëîòî.
Ùå ìè å èíòåðåñíî äà ðàçáåðà çàùî íå ðàáîòè è äàëè ñëåä ïðîìÿíàòà íà òàéìàóòèòå, ïúðâèÿò òè êîä íå áè çàðàáîòèë.
Íî ñå ðàäâàì, ÷å ñè íàìåðèë íà÷èí äà ñå îïðàâèø.EVGA X299 FTW K|i9-7960X@4.7|4x8 Patriot Viper Steel 4000|GTX 1660 Ti|970 EVO 1 TB|Seasonic Focus GX-1000|Xigmatek Elysium|Êèëî è ïîëîâèíà âîäà
Rampage IV Extreme BE|E5-1680v2@4.7|4x4 HyperX 1866|Cougar Aqua 240|GTX 1050 Ti|970 EVO 1/4 TB|CM 850 SilentPro|HAF-X|Áåç èñòèíñêî âîäíî
-
23rd November 2009 17:07 #19
È àç ïîìèñëèõ, ÷å ïðîáëåìúò å ïðè szBuff è ïðîâåðèõ êîëêî áàéòà ìó ñå îòäåëÿò - 1058.
Ãúðìåøå íÿêúäå êúì 250-èÿ áàéò.
Êàêòî è äà å, ÷åñòíî êàçàíî íÿìàì æåëàíèå ïîâåå äà ãî ðú÷êàì - ùå ãî òåñòâàì óñèëåíî òåçè äíè è ñå íàäÿâàì äà íÿìà ïðîáëåìè, çà äà ñå çàõâàùàì ñ äðóãè ðàáîòè
.




Reply With Quote

Lenovo ThinkPad 15 èëè IdeaPad 15
5th May 2023, 22:16 in Ìîáèëíè êîìïþòðè