<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>I can confirm that the #/performSelectorOnMainThread:withObject:waitUntilDone works quite differently from GUI:EXECUTE-IN-GUI. It does not result in a file chooser stall nor (so far) did it produce a memory surge in the <choose-file><run thread> simple test case. We are trying to use a performSelectorOnMainThread:withObject:waitUntilDone based approach in the full app but that has not worked yet. Could be that there are other GUI:EXECUTE-IN-GUI somewhere. </div><div><br></div><div>At any rate. The big question is now that is potentially wrong with GUI:EXECUTE-IN-GUI?</div><div><br></div><br><div><div>On Aug 30, 2012, at 8:45 PM, Gary Byers wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><span class="Apple-style-span" style="border-collapse: separate; font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; ">If so ... GUI:EXECUTE-IN-GUI is the right idea here, but I'm ignorant enough<br>of how dispatch queues work and of how they interact with the Cocoa event loop<br>to be a little skeptical of that function's implementation. (To say it again,<br>that skepticism is based on nothing more than my ignorance.)<br><br>Another way of doing the important part of what GUI:EXECUTE-IN-GUI does is<br>to do it at the Cocoa level; since we're not interested in a return value for<br>this test, we can define an ObjC method that does what CHOOSE-FILE-DIALOG2<br>does.  (We can define this method on any class; for the sake of argument,<br>we'll define a new class here.)<br><br>(defclass example (ns:ns-object)<br> ()<br>(:metaclass ns:+ns-object))<br><br>(objc:defmethod (#/chooseFileDialog2 :void) ((self example) arg)<br> (declare (ignorable arg))<br> (let* ((panel (#/openPanel ns:ns-open-panel)))<br>   (#/retain panel)<br>   (#/runModal panel)<br>   (#/release panel)))<br><br>(defvar *instance-of-example* (make-instance 'example))<br><br>(dotimes (i 100)<br> (#/performSelectorOnMainThread:withObject:waitUntilDone:<br>   *instance-of-example*<br>   (objc:@selector #/chooseFileDialog2)<br>   +null-ptr+<br>   t))<br><br>It'd be interesting to know whether that behaves any differently for you<br>than the one which uses GUI:EXECUTE-IN-GUI.<br><br>My model of how your application works is that the user clicks on a<br>button and that causes CHOOSE-FILE-DIALOG to be called (and eventually<br>causes problems) and that all happens on the main/event thread.  If<br>that's true, then no mechanism for forcing the file panel to open on<br>the main thread should be necessary and any difference between<br>mechanisms isn't relevant. If the mechanisms behave differently and<br>GUI:EXECUTE-IN-GUI is responsible for some of the problem, then we<br>should figure out what the issue is and fix it so that things like<br>this can be done more reliably, but any (hypothetical) problems with<br>GUI:EXECUTE-IN-GUI wouldn't be involved in your application unless it<br>works very differently than I assume it does.<br><br></span></blockquote></div><br><div>
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Helvetica" size="3" style="font: 12.0px Helvetica">Prof. Alexander Repenning</font></p><p style="margin: 0.0px 0.0px 0.0px 0.0px"><br class="khtml-block-placeholder"></p><p style="margin: 0.0px 0.0px 0.0px 0.0px">University of Colorado</p><p style="margin: 0.0px 0.0px 0.0px 0.0px">Computer Science Department</p><p style="margin: 0.0px 0.0px 0.0px 0.0px">Boulder, CO 80309-430</p><p style="margin: 0.0px 0.0px 0.0px 0.0px"><br class="khtml-block-placeholder"></p><p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Helvetica" size="3" style="font: 12.0px Helvetica">vCard: <a href="http://www.cs.colorado.edu/~ralex/AlexanderRepenning.vcf">http://www.cs.colorado.edu/~ralex/AlexanderRepenning.vcf</a></font></p><br class="Apple-interchange-newline"></span></span></span></span>
</div>
<br></body></html>