🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #5609

Re: Debugger Visual C++

#5609
From: Bert Peers
Date: Wed, 12 Mar 2003 21:56
49 lines
3674 bytes
Sven Callewaert wrote:

> Het antwoord op jouw geval staat op regel 886 van wincore.cpp. Feit is dat
> je een CWnd (ie. CChatDlg) uitwisselt met een andere thread en dat is niet
> threadsafe. Als je vanuit beide threads eenzelfde memberobject verandert kan
> dat
> onvoorspelbaar gedrag of een crash veroorzaken. Dat kan opgelost worden met
> locking (via mutexen en zo), maar dat is reeds advanced programming.

Het probleem hier is geen synchronisatie, maar het feit
dat MFC objecten thread-local zijn.  Elke thread heeft
een verzameling dictionaries, die bijhouden welke
CWnd er bij een HANDLE hoort, bv.  Als je nu van de
ene thread naar de andere een CChatDlg* doorstuurt,
krijg je die error omdat MFC hier een (child van een)
CWnd* te zien krijgt die niet in de dictionary van die
thread voorkomt.  Op zich is dat geen ramp want alles
bevindt zich nog steeds in hetzelfde proces, en dus
zijn memory en kernelhandles valid.  Het punt is alleen
dat als deze CChatDlg* nu zelf ook weer MFC gaat
gebruiken, MFC totaal niet meer gaat kunnen
volgen.  Bv, stel dat je deze CChatDlg hier zou
closen, dan gaat de destructor proberen de binding
HANDLE -> CWnd uit die dictionary te halen, wat ook
weer erg fout gaat wegens onvindbaar.  Idem bij
gebruik van CFont's en dergelijk die de dialog
nog in bezit heeft.

.... kortom : telkens als je tussen threads moet
praten, moet je niet-MFC objecten doorgeven.

Een klein(er) object doorgeven garandeert geen
thread-safety, dus dat moet je ook nog voorzien.

Verder zijn er ook nog issues met de message pump,
en wat MFC daar allemaal bovenop hackt, vooral als
het om dialogs gaat.

Dit alles maakt dat je de user interface echt wel
in 1 thread wil houden, tenzij je er eens ferm wil
invliegen voor een paar maanden :)  Multithreading
op zichzelf, plus dan nog met win32, plus dan nog
eens onder MFC, is Niet Om Te Lachen; dus je zou
best kijken of je dat hele idee niet kan afvoeren,
of anders, of je het kan inpassen in een "prefab"
scenario met worker threads en 1 UI thread (zie
google).

Bert
Technical Details
Message-ID: <W1Oba.64529$Pp1.57145@amsnews02.chello.com>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-06!sn-xit-09!supernews.com!news.maxwell.syr.edu!skynet.be!skynet.be!213.51.129.3.MISMATCH!newshub1.home.nl!home.nl!amsnews01.chello.com!amsnews02.chello.com.POSTED!53ab2750!not-for-mail
References: <JbGba.8496$Vq.687@afrodite.telenet-ops.be> <HpGba.8510$Vq.840@afrodite.telenet-ops.be> <tXGba.8544$Vq.382@afrodite.telenet-ops.be> <zgHba.8560$Vq.705@afrodite.telenet-ops.be> <tkHba.8569$Vq.730@afrodite.telenet-ops.be> <sxHba.8583$Vq.798@afrodite.telenet-ops.be> <lIHba.8594$Vq.784@afrodite.telenet-ops.be> <f7Iba.8618$Vq.829@afrodite.telenet-ops.be> <7gIba.8627$Vq.742@afrodite.telenet-ops.be> <KtIba.8637$Vq.718@afrodite.telenet-ops.be> <3e6f5a28$0$83859$ba620e4c@news.skynet.be>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,295e341629919ff3
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2003-03-12 13:56:20 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-06!sn-xit-09!supernews.com!news.maxwell.syr.edu!skynet.be!skynet.be!213.51.129.3.MISMATCH!newshub1.home.nl!home.nl!amsnews01.chello.com!amsnews02.chello.com.POSTED!53ab2750!not-for-mail
From: Bert Peers <piek@ab.oo>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826
X-Accept-Language: en-us, en, ja
MIME-Version: 1.0
Newsgroups: be.comp.programming
Subject: Re: Debugger Visual C++
References: <JbGba.8496$Vq.687@afrodite.telenet-ops.be> <HpGba.8510$Vq.840@afrodite.telenet-ops.be> <tXGba.8544$Vq.382@afrodite.telenet-ops.be> <zgHba.8560$Vq.705@afrodite.telenet-ops.be> <tkHba.8569$Vq.730@afrodite.telenet-ops.be> <sxHba.8583$Vq.798@afrodite.telenet-ops.be> <lIHba.8594$Vq.784@afrodite.telenet-ops.be> <f7Iba.8618$Vq.829@afrodite.telenet-ops.be> <7gIba.8627$Vq.742@afrodite.telenet-ops.be> <KtIba.8637$Vq.718@afrodite.telenet-ops.be> <3e6f5a28$0$83859$ba620e4c@news.skynet.be>
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
Lines: 50
Message-ID: <W1Oba.64529$Pp1.57145@amsnews02.chello.com>
Date: Wed, 12 Mar 2003 21:56:06 GMT
NNTP-Posting-Host: 195.162.217.96
X-Complaints-To: abuse@chello.be
X-Trace: amsnews02.chello.com 1047506166 195.162.217.96 (Wed, 12 Mar 2003 21:56:06 WEST)
NNTP-Posting-Date: Wed, 12 Mar 2003 21:56:06 WEST
Organization: chello broadband