【问题标题】:Nothing prints out in the console in command line tool Xcode命令行工具 Xcode 的控制台中没有打印任何内容
【发布时间】:2016-08-30 20:14:39
【问题描述】:

当我运行以下代码时,命令行工具 Xcode 的控制台中没有任何内容输出:

import Foundation

class A {
  var someValue = 0

  let concurrentQueue = dispatch_queue_create("queue_for_property", DISPATCH_QUEUE_CONCURRENT)

  func increaseValueBy1000() {
    dispatch_barrier_async(concurrentQueue) {
      for _ in 0 ..< 1000 {
        let v = self.someValue + 1
        print(v)
        self.someValue = v
      }
    }
  }
}

let instance1 = A()

dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0)) {
  instance1.increaseValueBy1000()
}

instance1.increaseValueBy1000()

我在控制台中没有看到任何打印语句。 如果我删除障碍线效果很好。 在这种情况下我做错了什么,为什么我的障碍不允许打印?

【问题讨论】:

    标签: swift barrier


    【解决方案1】:

    应用程序——例如有命令行程序——还没有“运行循环”的程序必须调用

    dispatch_main() // Swift 2
    dispatchMain()  // Swift 3
    

    为了使用 GCD。来自documentation

    这个函数“停放”主线程并等待块被 提交到主队列。调用UIApplicationMain 的应用程序 (iOS)、NSApplicationMain (Mac OS X) 或 CFRunLoopRun 线程不能调用dispatch_main

    【讨论】:

    • 谢谢,你能解释一下我应该叫它什么部分吗?
    • @wm.p1us:在程序结束时。另请参阅developer.apple.com/legacy/library/documentation/Darwin/…
    • 谢谢!奇迹般有效!但是,如果我删除障碍,我会得到重复值,但没有竞争条件。因为值不会被重写。
    • 我在用 swift 语言创建的命令行工具中遇到了同样的问题。需要做什么?上述链接对苹果开发者论坛无效。请解释解决方案。
    • @Tejas:我添加了指向当前文档的链接。
    猜你喜欢
    • 1970-01-01
    • 2015-12-11
    • 2012-03-23
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多