1

从概念上讲,我运行以下 Swift 伪代码来调节 UDP 发送的数据比特率

let sendQueue = DispatchQueue(label: "_send_queue", qos: .userInitiated)
sendQueue.async {
    for data in datas {
        socket.send(data)

        if let timespec = getTimeToSleep() {
            var ts = timespec
            nanosleep(&ts, nil) 
        }
    }
}

就我而言,睡眠时间通常约为 0.001 秒。一般来说,实际花费nanosleep()要高出几个百分点。到目前为止一切都很好 - 但经过一段时间nanosleep()后返回更长的时间 - 很容易它是几秒钟甚至一分钟。我很确定我不会要求这么长的间隔。我试过没有结果

  • release使用配置构建应用程序
  • 在调试器之外运行应用程序

奇怪的是,如果从调试器运行时发生这种情况 - 当我暂停并恢复应用程序时,它会再次正常运行一段时间。

有什么线索吗?

4

1 回答 1

2

啊,找到了这种行为的原因。macOS 应用程序小睡导致了这种情况。

执行

serverActivity = ProcessInfo().beginActivity(options: ProcessInfo.ActivityOptions.userInitiated, reason: "Serving Fast Data")

在我开始提供 UDP 数据之前,这使得一切都在时间上保持稳定和整洁。

于 2018-01-16T16:36:59.563 回答