Article View: be.comp.programming
Article #5609Re: Debugger Visual C++
From: Bert Peers
Date: Wed, 12 Mar 2003 21:56
Date: Wed, 12 Mar 2003 21:56
49 lines
3674 bytes
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-mailReferences:
<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