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