<div dir="ltr">Thank you. I knew it should be possible with GCD, but I was just not familiar with semaphores. Now everything perfectly works in the way I want.  <div><br></div><div>Ergin</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 23 March 2016 at 20:11, Jean-Denis Muys <span dir="ltr">&lt;<a href="mailto:jdmuys@gmail.com" target="_blank">jdmuys@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Here is an outline on how you might achieve that.<div><br></div><div>1- Create a background GCD queue and a GCD semaphore.</div><div>2- dispatch_async your sort routine on that queue</div><div>3- add a call to dispatch_semaphore_wait before starting your sort. This will grab the semaphore.</div><div>4- at the //wait here point, call dispatch_semaphore_wait on your semaphore. Since the semaphore was already grabbed, this will block.</div><div>5- separately implement some button on your interface, and on the main thread, its action will be to call dispatch_semaphore_signal. This will release the semaphore, and make your sort continue</div><div><br></div><div>I haven’t tested it, and there may be some devil in the details, but I think this can work.</div><span class="HOEnZb"><font color="#888888"><div><br></div><div>Jean-Denis</div></font></span><div><div class="h5"><div><br></div><div><br></div><div><br><div><blockquote type="cite"><div>On 23 Mar 2016, at 18:48, Ergin Bilgin via swift-users &lt;<a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a>&gt; wrote:</div><br><div><div dir="ltr">Thank you for help. Maybe I have over simplified my problem. In my first example, your advice was totally fine. But when I want to do something more complex, I could not figure out how to use it. For example, I want to print each step in my insertion sort. Like this:<div><br></div><div><div><font face="monospace, monospace" style="background-color:rgb(238,238,238)">for i in 1..&lt;toSort.count{</font></div><div><font face="monospace, monospace" style="background-color:rgb(238,238,238)">    var j: Int = i</font></div><div><font face="monospace, monospace" style="background-color:rgb(238,238,238)">    while ((j &gt; 0) &amp;&amp; (toSort[j-1] &gt; toSort[j])){</font></div><div><font face="monospace, monospace" style="background-color:rgb(238,238,238)">        let temp: Int = toSort[j]</font></div><div><font face="monospace, monospace" style="background-color:rgb(238,238,238)">        toSort[j] = toSort[j-1]</font></div><div><font face="monospace, monospace" style="background-color:rgb(238,238,238)">        toSort[j-1] = temp</font></div><div><font face="monospace, monospace" style="background-color:rgb(238,238,238)">        j--</font></div><div><font face="monospace, monospace" style="background-color:rgb(238,238,238)">        print(toSort)</font></div><div><font face="monospace, monospace" style="background-color:rgb(238,238,238)">        //Wait here.</font></div><div><font face="monospace, monospace" style="background-color:rgb(238,238,238)">    }   </font></div><div><font face="monospace, monospace" style="background-color:rgb(238,238,238)">}</font></div></div><div><br></div><div>I am looking for a solution without tearing the sorting algorithm into pieces. (If it is possible.) </div><div><br></div><div>Ergin</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 23 March 2016 at 18:52, George King <span dir="ltr">&lt;<a href="mailto:gwk.lists@gmail.com" target="_blank">gwk.lists@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Ergin,<br>
Are you familiar with how events are delivered via the application runloop? Essentially, you should not create a top-level loop that waits for input; the application runloop does this for you. If you want to accumulate 50 clicks, create the counter variable in the appropriate NSResponder (or UIResponder on iOS), e.g. your root NSView or your NSViewController. Then override `func mouseDown(event: NSEvent)` and increment the counter there.<br>
Hope that helps,<br>
George<br>
<div><div><br>
<br>
&gt;<br>
&gt; On Mar 23, 2016, at 12:35 PM, Ergin Bilgin via swift-users &lt;<a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt; Hello,<br>
&gt;<br>
&gt; I have a very simple while loop and I want to wait for a mouse click(can be a different input, not important) between every step.  What I want to achieve is something like this:<br>
&gt;<br>
&gt; while (i &lt; 50){<br>
&gt;<br>
&gt;<br>
&gt; print(i)<br>
&gt;<br>
&gt;     i<br>
&gt; += 1<br>
&gt;<br>
&gt;     waitForMouseClick<br>
&gt; () //Wait here for user input.<br>
&gt; }<br>
&gt; I also use Sprite Kit if you can think a solution related to it.<br>
&gt;<br>
&gt; Cheers,<br>
&gt;<br>
&gt; Ergin<br>
&gt;<br>
</div></div>&gt; _______________________________________________<br>
&gt; swift-users mailing list<br>
&gt; <a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a><br>
&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-users" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-users</a><br>
<br>
</blockquote></div><br></div>
_______________________________________________<br>swift-users mailing list<br><a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a><br><a href="https://lists.swift.org/mailman/listinfo/swift-users" target="_blank">https://lists.swift.org/mailman/listinfo/swift-users</a><br></div></blockquote></div><br></div></div></div></div></blockquote></div><br></div>