Here is an outline on how you might achieve that.

1- Create a background GCD queue and a GCD semaphore.
2- dispatch_async your sort routine on that queue
3- add a call to dispatch_semaphore_wait before starting your sort. This will 
grab the semaphore.
4- at the //wait here point, call dispatch_semaphore_wait on your semaphore. 
Since the semaphore was already grabbed, this will block.
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

I haven’t tested it, and there may be some devil in the details, but I think 
this can work.

Jean-Denis



> On 23 Mar 2016, at 18:48, Ergin Bilgin via swift-users 
> <swift-users@swift.org> wrote:
> 
> 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:
> 
> for i in 1..<toSort.count{
>     var j: Int = i
>     while ((j > 0) && (toSort[j-1] > toSort[j])){
>         let temp: Int = toSort[j]
>         toSort[j] = toSort[j-1]
>         toSort[j-1] = temp
>         j--
>         print(toSort)
>         //Wait here.
>     }   
> }
> 
> I am looking for a solution without tearing the sorting algorithm into 
> pieces. (If it is possible.) 
> 
> Ergin
> 
> On 23 March 2016 at 18:52, George King <gwk.li...@gmail.com 
> <mailto:gwk.li...@gmail.com>> wrote:
> Hi Ergin,
> 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.
> Hope that helps,
> George
> 
> 
> >
> > On Mar 23, 2016, at 12:35 PM, Ergin Bilgin via swift-users 
> > <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:
> >
> > Hello,
> >
> > 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:
> >
> > while (i < 50){
> >
> >
> > print(i)
> >
> >     i
> > += 1
> >
> >     waitForMouseClick
> > () //Wait here for user input.
> > }
> > I also use Sprite Kit if you can think a solution related to it.
> >
> > Cheers,
> >
> > Ergin
> >
> > _______________________________________________
> > swift-users mailing list
> > swift-users@swift.org <mailto:swift-users@swift.org>
> > https://lists.swift.org/mailman/listinfo/swift-users 
> > <https://lists.swift.org/mailman/listinfo/swift-users>
> 
> 
> _______________________________________________
> swift-users mailing list
> swift-users@swift.org
> https://lists.swift.org/mailman/listinfo/swift-users

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to