[ Pobierz całość w formacie PDF ]
.Nale¿y zwróciæ uwagê, ¿e wywo³ania tego typu komunikatów mo¿emy zpowodzeniem umieœciæ w odpowiednim miejscu funkcji Read_Comm().Dziêki temuzyskamy nieco na d³ugoœci kodu, ale, jak siê wydaje, algorytmy strac¹ wówczasna przejrzystoœci.Funkcjê GetLastError() czêsto stosujemy do sprawdzania rezultatu wykonaniaoperacji otwarcia lub utworzenia pliku przeznaczonego do transferu.Je¿elizechcemy mieæ informacjê o tym, czy nowo otwarty plik nie jest ju¿ przypadkiemwykorzystywany przez inny trwaj¹cy proces mo¿emy pos³u¿yæ siê nastêpuj¹c¹konstrukcj¹:HANDLE hfile_s;DWORD dwError;LPVOID MsgBuf;.hfile_s = CreateFile(FileListBox1->FileName.c_str(), GENERIC_READ,0, NULL, OPEN_EXISTING, 0, NULL);.switch (dwError = GetLastError()){case ERROR_SHARING_VIOLATION : {FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,NULL, dwError, MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), (LPTSTR) &MsgBuf, 0, NULL );MessageBox(NULL, (LPTSTR) MsgBuf, "Uwaga",MB_OK|MB_ICONINFORMATION);LocalFree(MsgBuf);break;}.}Przy próbie otwarcia do transmisji pliku aktualnie wykorzystywanego przez innyprogram lub pliku bêd¹cego czêœci¹ macierzystej aplikacji na ekranie ujrzymypomocn¹ informacjê:Rysunek 5.12.Informacja otrzymywana przez aplikacjê przy próbie otwarcia plikuwykorzystywanego przez inny trwaj¹cy obecnie procesNie oznacza to oczywiœcie, ¿e takiego zbioru nie bêdziemy ju¿ w stanieprzetransmitowaæ, niemniej jednak przy wszelkich operacjach na tego rodzajuplikach nale¿y zachowaæ ostro¿noœæ.PodsumowanieW podrozdziale omówiliœmy kolejne, podstawowe funkcje pomocne w procesietworzenia oprogramowania komunikacyjnego.Czytaj¹c o nich poznaliœmy zarównozalety jak i wady niektórych komponentów przy wyœwietlaniu informacjiodbieranych z portu szeregowego.Nabraliœmy te¿ pewnych doœwiadczeñ,projektuj¹c aplikacje przesy³aj¹ce i odbieraj¹ce pliki.Zapoznaliœmy siê te¿ zpraktycznym wykorzystaniem komponentu TTimer, za pomoc¹ którego mo¿emypróbkowaæ wybrany port szeregowy w poszukiwaniu nadchodz¹cych danych.Wiêkszoœæwspomnianych tematów potraktowaliœmy w sposób dosyæ ogólny, choæ w miarêkompletny.Zauwa¿yliœmy te¿ zapewne, ¿e w przysz³oœci coraz mniej uwagibêdziemy zmuszeni poœwiêcaæ czasoch³onnemu „drucikowaniu”, czyli ³¹czeniu jakiœprzewodów i domyœlaniu siê, który sygna³ jest za co odpowiedzialny.Za to wcoraz wiêkszym stopniu zaczyna absorbowaæ nas sam proces tworzeniaoprogramowania.Po przeczytaniu tego fragmentu ksi¹¿ki nie powinno ju¿ stanowiædla nas problemu przes³anie poprzez interfejs RS 232C pojedynczego znaku, ci¹guznaków czy nawet dosyæ sporego pliku.Æwiczenia1.Zmodyfikuj przedstawiony na wydruku 5.6 kod programu RS_05.cpp tak, abykorzysta³ jedynie z funkcji CreateFile() oraz ReadFile() przy przesy³aniuplików.2.Zmodyfikuj przedstawiony na wydruku 5.7 kod programu RS_06.cpp tak, abyistnia³a mo¿liwoœæ przesy³ania zaznaczonego (i ewentualnie skopiowanego doschowka) fragmentu pliku.3.Zmodyfikuj przedstawiony na wydruku 5.8 kod programu RS_07.cpp tak, abyzapisywa³ na dysku cyklicznie odbierane dane.Postaraj siê nie traciæinformacji w momencie od³¹czenia przyrz¹du lub innego komputera
[ Pobierz całość w formacie PDF ]