C++ a COM porty 2.

Dusan Dolezal duffa@inmail.cz
Úterý Červenec 29 07:57:36 CEST 2008


Vice threadu se opravdu nebojte, ono to mozna zni jako neco co je strasne
slozite ale ve skutecnosti je samotne vytvoreni threadu primo primitivni.
Samozrejme jina kapitola je synchronizace threadu ale to v nejake jednoduche
aplikaci neni tak kriticke a asi nebudete muset thready synchronizovat
vubec.

Takze si vytvorite funkci kde se vlakno vude vykonavat:

DWORD WINAPI FunkceVlakna(LPVOID lpvThreadParam)
{
   //...
   //tady se neco bude delat
   //...

   return 0;
} 

a pak se vlakno vytvori zavolanim

CreateThread(NULL,0,FunkceVlakna,(LPVOID)NULL,0,NULL);

Ten kod co je ve funkci 'FunkceVlakna' se vykona a vlakno se pak ukonci. Ve
vasem pripade se vlakno hned nebude ukoncovat ale pobezi tam nejaka smycka,
ktera bude cist z portu. Tim ze je to v samostatnem vlakne tak ciste
teoreticky ani nepotrebujete otevirat ten port jako overlapped, ono za
normalnich okolnosti pokud neni v bufferu znak tak program ceka na jeho
prijem a tim vlastne zamrzne, u samostatneho vlakna to vlastne nevadi
protoze program normalne reaguje, ceka jen to vlakno. Samozrejme ten
overlapped mod ma spoustu vyhod a bude vhodnejsi, ale je taky o neco
slozitejsi tak to pro zacatek muzete zkusit bez nej.

Jinak tohle je opravdu jenom uplne to nejosekanejsi co se da udelat, ve
skutecnosti je tema threadu a procesu na celou tlustou knizku (a taky o tom
tluste knizky vychazeji) ale pro zacatek by vam tohle mohlo stacit na
rozkoukani a postupne do toho proniknete. Na webu je plno prikladu (napr.
vynikajici web je codeproject.com, tady je zrovna sample na seriovou
komunikaci: http://www.codeproject.com/KB/system/chaiyasit_t.aspx), pripadne
vysla i knizka v cestine primo se venujici programovani seriove komunikace
pod Win, viz
http://hw.cz/Teorie-a-praxe/Knihovnicka/ART854-Seriova-komunikace-ve-Win32.h
tml

Dusan Dolezal

> -----Original Message-----
> From: hw-list-bounces@list.hw.cz 
> [mailto:hw-list-bounces@list.hw.cz] On Behalf Of Va_Sm
> Sent: Monday, July 28, 2008 10:28 PM
> To: HW-news
> Subject: Re: C++ a COM porty 2.
> 
> A nebyl by nekde k dispozici kompletnejsi kod? nevim presne jak 
> naprogramovat zalozeni noveho vlakna.....
> Jaroslav Buchta napsal(a):
> > Ano, pouziti extra vlakna na obsluhu COM portu sedi jak 
> pr... Na nocniku
> > ;-) 
> > Dulezite je otevreni portu s priznakem 
> FILE_FLAG_OVERLAPPED, aby se dalo
> > cekat na prijem funkci WaitComSingleObject
> >
> > 	CString csName;
> > 	csName.Format ("\\\\.\\%s", m_csPortName);
> >
> > 	m_ComHandle = CreateFile(csName,GENERIC_READ | GENERIC_WRITE,
> > 							0,
> > 							NULL,
> > 							OPEN_EXISTING,
> > 	
> > FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, // overlapped I/O
> > 							NULL);
> > 	if (m_ComHandle == INVALID_HANDLE_VALUE) ERRSETSTATUS_RF
> > (EC_OPNERR, m_csPortName);
> >
> >
> > -----Original Message-----
> > From: hw-list-bounces@list.hw.cz 
> [mailto:hw-list-bounces@list.hw.cz] On
> > Behalf Of Va Sm
> > Sent: Monday, July 28, 2008 2:38 PM
> > To: hw-list@list.hw.cz
> > Subject: C++ a COM porty 2.
> >
> >
> > Dobry den,
> > mohl by mi nekdo poskytnout funkcni kousek kodu v C++ 
> vyuzivajici win
> > api k pristupu na seriovy port? Nedavno jsem se ptal, zda existuje
> > komponenta, ktera by tohle resila - jako Vacomm v Delphi - 
> podminkou je
> > vyvovali udalsoti na prichozi znak. Bylo mi receno, ze je 
> to jednoduche
> > prave pres win api. Skutecne to nevypada az tak slozite, 
> ale trapim se
> > prave s prijmem znaku. Nedari se mi prave to vyvolani udalsoti s
> > prichozim znakem. Je nutne takovou jednoduchou ulohu resit pouzitim
> > vlaken?
> >
> > dekuji
> > V. Smidl
> > _______________________________________________
> > HW-list mailing list  -  sponsored by www.HW.cz Hw-list@list.hw.cz
> > http://list.hw.cz/mailman/listinfo/hw-list
> >
> > _______________________________________________
> > HW-list mailing list  -  sponsored by www.HW.cz
> > Hw-list@list.hw.cz
> > http://list.hw.cz/mailman/listinfo/hw-list
> >
> > __________ Informace od NOD32 3301 (20080727) __________
> >
> > Tato zprava byla proverena antivirovym systemem NOD32.
> > http://www.nod32.cz
> >
> >
> >
> >   
> 
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
> 
> __________ Informace od NOD32 3303 (20080728) __________
> 
> Tato zprava byla proverena antivirovym systemem NOD32.
> http://www.nod32.cz
> 
> 




Další informace o konferenci Hw-list