假设我们有一千头奶牛要挤奶了。如果我们想要特定母牛的队列等待时间,那么测量队列入口和出口的到达时间是不够的:母牛不一定遵循FIFO协定。每次到达时间的测量结果必须与堆垛机特有的RFID测量结果配对。
通过选择特定的RFID数据(即特定的母牛),可以使用两个到达时间来计算等待时间。
合并数据或在这种情况下将RFID附加到测量数据点的做法的名称是什么?
答案 0 :(得分:0)
我正试图了解您的问题。也许您的示例的解决方案是:
您有一个自定义类
class Cow {
var rfidTag: String?
var queueEnteredAt: Date?
var queueExitedAt: Date?
}
其中rfidTag
一经初始化就被初始化。
对于所有母牛,您可以使用数组或一组Cow
实例:
var cows: [Cow]
必须正确初始化。
现在,当奶牛进入或退出队列时,将扫描RFID标签,并且必须访问相应的cow
实例:
let scannedCow = cows.filter { $0.rfidTag == scannedRFIDtag }.first
并调用一个函数来设置此queueEnteredAt
的相应属性queueExitedAt
或cow
,例如:
scannedCow?.queueEnteredAt = Date()
最终,您可以对数组进行任何类型的统计。
PS:我不确定这是否有帮助,因为您问题的标签是序列化,并且在您对问题的编辑中,您询问过命名...
编辑:
如果RFID扫描器在单独的线程上传送scannedRFIDtag
,则可能确实存在序列化问题,因为2个线程可能会尝试访问cows数组并在那里同时设置属性。在这种情况下,您需要对访问进行序列化,这可以通过将操作重定向到主队列来完成(如果仅要做很少的工作):
DispatchQueue.main.async {
// serialised operations
}
或通过设置串行访问队列:
private let serialAccessQueue = DispatchQueue(label: "com.xxx.yyy“)
并在那里工作:
serialAlertQueue.sync {
// serialised operations
}