Как разбудить спящую нить в Swift 5 - PullRequest
0 голосов
/ 07 мая 2020

У меня есть метод делегата фреймворка Bluetooth, при котором через несколько миллисекунд я получаю ответ, который мне нужно прочитать из другого метода, запущенного в потоке. Обычно ответ дается через 30–100 мс после операции записи. Поскольку за очень короткое время может быть выполнено несколько операций записи, мне нужно как можно скорее прочитать ответ.

//Delegate method-->
var readData?
func responseFromBLE(data: Data){
     readData = data
     //wake up the sleeping thread as soon as this method calls
}

//Here is the thread which writes to BLE and then it waits for 100ms before reading data
func writeSyc(data: Data?, key: String) {
    DispatchQueue.global().async {
        BLEViewController.semaphore.wait() 
            writeToBLE(data: data!)
            usleep(100000).  //sleeping for 100ms
            saveTheBLEResponse(key, readData)
        BLEViewController.semaphore.signal() // releasing the resource
    }
}

Я хочу ускорить эту операцию и пробудить поток до 100 мс, как только responseFromBLE (data: Data ) вызовы методов. Если это невозможно, дайте мне знать, есть ли еще какой-нибудь прием, который я могу использовать для ускорения операции записи.

...