相关疑难解决方法(0)

调度队列:如何判断它们是否正在运行以及如何阻止它们

我正在玩GCD,我写了一个玩具CoinFlipper应用程序.

这是翻转硬币的方法:

- (void)flipCoins:(NSUInteger)nFlips{

    // Create the queues for work
    dispatch_queue_t mainQueue = dispatch_get_main_queue();
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, NULL);

    // Split the number of flips into whole chunks of kChunkSize and the remainder.
    NSUInteger numberOfWholeChunks = nFlips / kChunkSize;
    NSUInteger numberOfRemainingFlips = nFlips - numberOfWholeChunks * kChunkSize;

    if (numberOfWholeChunks > 0) {
        for (NSUInteger index = 0; index < numberOfWholeChunks; index++) {
            dispatch_async(queue, ^{
                NSUInteger h = 0;
                NSUInteger t = 0;
                flipTheCoins(kChunkSize, &h, &t);
                dispatch_async(mainQueue, ^{
                    self.nHeads += h; …
Run Code Online (Sandbox Code Playgroud)

cocoa multithreading objective-c grand-central-dispatch

33
推荐指数
2
解决办法
4万
查看次数

暂停GCD查询问题

我无法暂停gcd查询.以下是一些演示此问题的代码:

static dispatch_queue_t q=nil;

static void test(int a){
    if(q){
        dispatch_suspend(q);
        dispatch_release(q);
        q=nil;
    }
    q=dispatch_get_global_queue(0,0);
    dispatch_async(q,^ {
        while(1){NSLog(@"query %d",a);sleep(2);}
    });

}

int main(int argc, const char* argv[]){
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    test(1);

    //blah blah blah

    test(2);

    while(1){}
    [pool release];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试做的是在第二次调用函数测试时暂停,释放和重新初始化查询q,但显然我的代码是错误的,并且查询q的两个实例都继续运行.

非常感谢您的帮助,谢谢.

objective-c grand-central-dispatch

30
推荐指数
2
解决办法
3万
查看次数

如何在NSOperationQueue中暂停NSOperation?

我需要暂停一个插入NSOperationQueue的正在运行的NSOperation.目前我取消所有操作并重新启动它们.但这会导致在完成流程方面出现某种重复.我尝试使用NSOperationQueue的setSuspended标志.但它并没有暂停这项行动.有什么出路吗?

macos cocoa nsoperation nsoperationqueue ios

16
推荐指数
1
解决办法
1万
查看次数