C++ a COM porty 2.

Jaroslav Buchta jaroslav.buchta@gmail.com
Úterý Červenec 29 13:21:25 CEST 2008


Ukonci se samo automaticky, jinak aby se korektne ukoncilo je potreba
prave provadet obsluhu v rezimu OVERLAPED, pak se da vyskocit z cekani I
jinou udalosti, timeoutem atp. Pokud ma byt vlakno proste funkcni po
celou dobu behu aplikace, je to OK I bez ukonceni, problem je treba kdyz
se ma zmenit v nejakem nastaveni port atp.

-----Original Message-----
From: hw-list-bounces@list.hw.cz [mailto:hw-list-bounces@list.hw.cz] On
Behalf Of Va Sm
Sent: Tuesday, July 29, 2008 11:23 AM
To: HW-news
Subject: RE: C++ a COM porty 2.


Dekuji, spachal jsem program podle Vaseho doporuceni a zda se, ze i
fugnuje. Je potreba osetrit ukonceni vlakna po zavreni aplikace nebo je
toto ruseno po zavreni okna?

> ------------ Původní zpráva ------------
> Od: Dusan Dolezal <duffa@inmail.cz>
> Předmět: RE: C++ a COM porty 2.
> Datum: 29.7.2008 07:58:40
> ----------------------------------------
> 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-Win
32.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
> > 
> > 
> 
> _______________________________________________
> 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




Další informace o konferenci Hw-list