从概念上讲,我运行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.001s。一般来说,实际在nanosleep()上的花费要高出几个百分点。到目前为止还不错--但是过了一段时间,nanosleep()会在更长的时间后返回--很容易,它是秒,甚至是一分钟。我很确定我不会要求这么长的间隔。我试着跟着,但没有结果。
release配置构建应用程序奇怪的是,如果这种情况是在调试器运行时发生的--当我暂停并继续应用程序时,它会再次正常运行一段时间。
有什么线索吗?
发布于 2018-01-16 16:36:59
啊,找到了这种行为的原因。macOS应用程序nap是造成这种情况的原因。
执行
serverActivity = ProcessInfo().beginActivity(options: ProcessInfo.ActivityOptions.userInitiated, reason: "Serving Fast Data")在我开始为UDP服务之前,所有的数据都要及时和整洁地保持稳定。
https://stackoverflow.com/questions/48285535
复制相似问题