[ Pobierz całość w formacie PDF ]
.Je¿eli interesuje nas jedynie przes³anie pliku, rozmiar buforawyjœciowego mo¿emy tak naprawdê ustaliæ na 1 bajt (cbOutQueue = 1) — tyle ilepobieramy z dysku za pomoc¹ funkcji _lread().Jej u¿ycie wyd³u¿a oczywiœcieczas transmisji, niemniej jednak bêdziemy mieli pewnoœæ, ¿e przeznaczony dowys³ania zbiór danych dojdzie do adresata w ca³oœci.Nale¿y dodaæ, ¿e istniejeznacznie szybszy sposób przetransferowania porcji danych.W tym celu mo¿na odrazu za³adowaæ zawartoœæ okna edycji do bufora wyjœciowego w sposób identyczny,jak w przypadku danych wysy³anych z klawiatury.Przyk³adowa funkcja mog³abyprzybraæ nastêpuj¹c¹ postaæ:int __fastcall RS_SendFile(Pointer Parameter){.strcpy(Buffer_O, Form1->RichEdit1->Lines->Text.c_str());Write_Comm(hCommDev, strlen(Buffer_O));return TRUE;}Niemniej jednak postêpuj¹c w ten sposób, musimy ju¿ pamiêtaæ o zadeklarowaniuodpowiedniego bufora dla danych wyjœciowych.Ponadto nale¿y zdawaæ sobiesprawê, ¿e istnieje zawsze niebezpieczeñstwo bardzo szybkiego przepe³nieniabufora wejœciowego odbiornika, je¿eli oczywiœcie nie u¿ywa on specjalnychprotoko³Ã³w transmisji.Dalsze omawianie zwartoœci powy¿szego wydruku nie bêdzie ju¿ chyba na naszymetapie rozwa¿añ wnosiæ nic nowego.S¹ jeszcze pewne subtelnoœci zwi¹zane zzastosowanym przez nas sposobem wykorzystania w¹tków w programachkomunikacyjnych.Omówimy je ju¿ za chwilê.Zamiast TimeraK³opoty z tytu³owym bohaterem tego podrozdzia³u nie s¹ oczywiœcie w³asnoœci¹jedynie Delphi.Testuj¹c napisany wczeœniej program (projekt p_RS_07.bpr), napewno zauwa¿yliœmy, ¿e nie pracowa³ on w sposób wybitnie elegancki.Dzia³o siêto równie¿ za spraw¹ u¿ycia w nim komponentu TCSpinEdit, którego dzia³anie bezszeregu uprzednich zabezpieczeñ mo¿e byæ nieco zdradliwe.Zapewne wiêkszoœæCzytelników ju¿ siê z tym zapozna³a, testuj¹c tamt¹ aplikacjê.Lekarstwem na tezmartwienia mo¿e okazaæ siê u¿ycie w odpowiednim miejscu programu dwóchinstrukcji do.while (lub oczywiœcie samych while), przy czym zewnêtrzna, zlogicznego punktu widzenia, nigdy nie mo¿e ulec zakoñczeniu.FunkcjaRS_Send_Receive(), bêd¹ca integraln¹ czêœci¹ naszej nowej aplikacji, którejprojekt widzimy na rysunku 6.4 jest w³aœnie tak zbudowana.Kolejn¹ modyfikacj¹,jak¹ zastosowa³em, jest u¿ycie komponentu TUpDown.Ma on tak¹ ciekaw¹ w³asnoœæ,¿e wartoœæ jego cechy Position mo¿e byæ wyœwietlana tylko poœrednio, np.w poluedycji TEdit.Wówczas nawet z³oœliwe skasowanie zawartoœci danego pola edycji w¿adnym razie nie wp³ynie na sposób funkcjonowania programu, gdy¿ aktualnawartoœæ jego wymienionej cechy bêdzie zawsze argumentem funkcji opóŸniaj¹cejSleep() [3 Pisz¹c tego rodzaju aplikacje, nale¿y zawsze wybieraæ komponentyumo¿liwiaj¹ce poœrednie wyœwietlanie wybranej wartoœci liczbowej w trakciedzia³ania programu.Unikamy w ten sposób konsekwencji zwi¹zanych z przypadkowymskasowaniem zawartoœci komponentu edycyjnego.].Ca³oœæ zosta³a uzupe³niona odobrze znan¹ nam funkcjê tworz¹c¹ w¹tek, któr¹ wywo³ujemy w funkcji obs³ugizdarzenia MeasureONClick().Rysunek 6.4.Formularz projektu p_RS_09.bprWydruk 6.4.Kod modu³u RS_09.cpp aplikacji wykorzystuj¹cej elementywielow¹tkowoœci przy obs³udze woltomierza cyfrowego//--- kompilowaæ z borlndmm.dll oraz cc3250mt.dll --------------//----RS_09.cpp-------------#include#pragma hdrstop#include "RS_09.h"#pragma package(smart_init)#pragma resource "* [ Pobierz caÅ‚ość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • luska.pev.pl
  •