Вызов функции C из dispatch_async глобальный сбой, но работает в основной очереди - PullRequest
0 голосов
/ 21 сентября 2018

enter image description here Я столкнулся со странной проблемой, когда при вызове статической функции библиотеки ac из глобальной очереди отправки код вылетает в библиотеке C.Но если я вызываю тот же код из основного потока, он выполняется успешно. Ниже приведена сводная информация о фрагменте кода: -

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
// Below is the C code
int returnCode = calculate_feature_vector([dest_folder UTF8String],[dest_path 
UTF8String],feature_vector);
   dispatch_async(dispatch_get_main_queue(), ^{
    completion(distanceMap);
});

Я не уверен, почему происходит его сбой, любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Я в состоянии решить проблему сейчас.Решение состояло в том, чтобы обернуть код c в целевой класс c, а затем вызвать целевой код c из очереди отправки.Ранее я вызывал код c прямо из очереди отправки.

0 голосов
/ 22 сентября 2018

Любые вызовы, в которых используется графический интерфейс MacOS или которые обрабатывают текст, включая ключевые переводчики, источники ввода текста и любые вызовы диспетчера текстовых служб, должны выполняться в главном потоке, иначе вы можете потерпеть крах.Я не знаю зависимости этой библиотеки, но вы должны искать все, что я здесь упоминаю.Если они у вас есть, вы должны создать службу XPC, чтобы обрабатывать это в главном потоке, а не блокировать ваш пользовательский интерфейс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...