CBPeripheral didUpdateValueForCharacteristic,女仆同步

时间:2013-07-31 14:00:26

标签: ios multithreading events asynchronous bluetooth

我有一个众所周知的(由我)串行外设构建的BLE外设。 对于该串行外设,我有一个完整的家庭女佣,实现其串行协议。 该协议遵循以下规则:发送消息然后立即收到答案。

右。我已经通过蓝牙重新实现了通信,使用CoreBluetooth.framework,它的工作并没有那么糟糕。 我的主要问题是等到调用didUpdateValueForCharacteristic之后再考虑获得回复。 (谢谢stackoverflow的家伙们,我发现这里的回复数量已经挽救了我的生命)

但现在在与我的设备交谈时,我必须做一些事情:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    dispatch_async(m_ProcessingQueue, ^{
        bool ok = [MyPeripheral ExcecuteCommand];
    });

}

如果我这样做:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
     bool ok = [MyPeripheral ExcecuteCommand];
}

未调用didUpdateValueForCharacteristic。执行命令超时,并返回false。然后,调用didUpdateValueForCharacteristic,其中包含良好的数据。

我已经发现在主线程中调用了didUpdateValueForCharacteristic:

- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{
    NSLog(@"didUpdateValueForCharacteristic %@", [NSThread isMainThread]?@"is main thread":@"is NOT main thread"); // wich reply true !
}

所以如果没有调用[MyPeripheral ExcecuteCommand];在另一个线程中,我得到主线程被阻止,并且永远不要让didUpdateValueForCharacteristic被调用。

最后我的问题是: 有没有办法在后台线程中调用didUpdateValueForCharacteristic?

谢谢!

0 个答案:

没有答案