[pso] Probleme Threaduri in C++

ovidiu popa ov.popa at gmail.com
Sun May 17 16:54:33 EEST 2009


O sa incerc sa fiu ceva mai explicit. Partea asta a aplicatiei se ocupa cu
descoperirea unor device-uri de bluetooth. Apoi se realizeaza conexiuni
catre aceste device-uri si se asteapta primirea de conexiuni.

Comportamentul aplicatiei este urmatorul:
- se porneste un thread principal care va initializa toate celelate
threaduri
- se pornesete un thread care face device discovery (dureaza vreo 20 de
secunde partea asta)
- se porneste un thread pt scriere de mesaje catre peers
- se porneste un thread care asteapta mesajele

threadurile de read si de write se realizeaza in bucle si nu ar trebui sa se
termine.

Threadul principal porneste toate aceste threaduri.
Totul e bine si frumos  pana se termina functia de device discovery.

Threadurile aratate de visual studio pana se strica sunt dupa cum urmeaza:

Id                                     name                       Location

f667bf36                 WinMainCRTStartup             0x88045644
376314918         Client::connectToDevices           0x88045644
915888562        DeviceFinder::FindDevices
DeviceFinder::FindDevices
912841594      MessageReader::readMessages    0x88045644
1991455818    MessageWriter::writeMessages     0x88045644


Problema apare in momentul in care threadul care face device discovery
termina functia asociata. Cand se iese din functie thread-ului  se intampla
o chestie dubioasa dupa cum urmeaza:

Threadul de find Devices dispare dupa cum e normal. Problema apare ca
threadul de MessageReader se transforma in message writer,  dupa cum
urmeaza:

Id                                     name                       Location

f667bf36                 WinMainCRTStartup             0x88045644
376314918         Client::connectToDevices           0x88045644
912841594     MessageWriter::writeMessages    0x88045644
1991455818     MessageWriter::writeMessages    0x88045644

Dupa inca o intructiune dispare  cu totul threadul care inainte era reader
.

Cam de la ce ar putea sa fie? Noi ne gandim ca e de la o problema cu
memoria, ca suprascriem vreo adresa de intoarecere sau corupem ceva...

Stie cineva vreun tool util pt visual studio? Noi am incerca Application
Verifier de la microsoft da nu am descoperit cine stie ce :(

Merci de ajutor

2009/5/17 Gabriel Bercea <gamitech at gmail.com>

> 1) Nu iesiti din thread cu exit thread si doar cu return
> 2) Sa nu aveti peding operations asociate cu threadul
> 3) Cum iti dai seama ca nu s-a terminat threadul ? cum testezi asta ?
>
>
> finally, din explicatia data initial nu inteleg de fapt care e pbema, si
> nici comportamentul aplicatiei ??
> ai 5 threaduri, p care le pornesti si au fiecare cate un StartRoutine sau
> 5  start routines diferite ? Please be a little more concrete
>
>
>
>
> 2009/5/17 Alexandru Bleotu <alexbleotu at gmail.com>
>
> Threadul principal nu moare... mai mult doua dintre threaduri continua...
>> banuim ca este vorba despre memory corruption
>>
>> 2009/5/17 Mircea Bardac <cs at mircea.bardac.net>
>>
>> Salut,
>>>
>>> ovidiu popa wrote:
>>> > Am o aplicatie in C++ care porneste 5 threaduri.
>>> > In momentul in care functia asociata unui thread ajunge la sfarsitul
>>> > executiei se incheie executia si a altui thread care ar trebui sa
>>> ruleze o
>>> > bucla infinita...
>>>
>>> Nu sunt convins ca am inteles bine problema asa ca o sa reformulez un
>>> pic: cand se termina thread-ul 1, observi ca s-a terminat si thread-ul 2
>>> cu toate ca thread-ul 2 ar trebui inca sa mai ruleze.
>>>
>>> O idee: verifica faptul ca in thread-ul principal (acolo unde creezi
>>> cele 2 thread-uri) astepti ambele thread-uri, nu doar thread-ul 1
>>> (WaitForSingleObject/WaitForMultipleObjects). Daca astepti doar
>>> thread-ul 1, thread-ul principal isi va continua executia => aplicatia
>>> se va termina (ExitProcess) => toate thread-urile aplicatiei vor fi
>>> terminate.
>>>
>>> Good luck.
>>>
>>> --
>>> Mircea
>>> http://mircea.bardac.net
>>> _______________________________________________
>>> pso mailing list
>>> pso at cursuri.cs.pub.ro
>>> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
>>>
>>
>>
>> _______________________________________________
>> pso mailing list
>> pso at cursuri.cs.pub.ro
>> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
>>
>>
>
> _______________________________________________
> pso mailing list
> pso at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/pso/attachments/20090517/301aba16/attachment.htm>


More information about the pso mailing list