目标c线程1信号SIGSTOP应用程序崩溃

时间:2014-06-23 20:04:48

标签: ios objective-c multithreading boost

我正在尝试追踪似乎肯定是时间问题的错误。我有一个使用通用框架的应用程序。当流程在框架中完成时,NSNotification将发送回应用程序。我们最近在我们的框架中添加了第三方框架。现在,在执行第三方框架的方法时,当执行返回到我们的框架时,我在控制台输出中收到以下错误:

Assertion failed: (exclusive), function assert_locked, file ../dep/include/boost/boost_1_55_0/boost/thread/pthread/shared_mutex.hpp, line 51.

但我不确定这是否是最终问题,因为我们的框架继续执行并且NSNotification被发送回应用程序。在发送通知并且执行返回到我们框架中的调用方法(或方法调用)之后,我在执行线程上看到警告。然后,执行继续回到原始调用方法,警告消失。

这是奇怪的部分。如果我非常缓慢地逐步执行代码,它可能会起作用。如果我不够慢,我会得到SIGSTOP,代码永远不会返回到UI。如果我太快,我会得到一个SIGABRT。

我一直试图使用Instuments找到确切的问题。 This answer to a similar question支持我的怀疑,这是一个时间问题。我认为提升assert_locked Assertion可能与此有关。

我的代码很无聊,但我知道你想看到它,所以这里是:

- (void)generateImageTemplates:(UIImage *)src
{
    int result = 0;
    cv::Mat image = *(cv::Mat*)[self cvMatFromUIImage:src];

    user = IEngine_InitUser();
    int userID=0;
    result = IEngine_AddFingerprintRAW(user, UNKNOWN, image.data, image.size().width, image.size().height);
    result = IEngine_RegisterUser(user, &userID);

    [[NSNotificationCenter defaultCenter] postNotificationName:@"InnovatricsComplete" object:self];
}

如果您想知道结果是什么,那就是错误代码。到目前为止,这些都回到了等于0.意思是没有错误。一旦我成功返回到UI而不崩溃,我将处理这些错误。

控制返回方法调用:

- (void)generateImageTemplates:(UIImage *)processedImage
{ 
    [self.captureCommand generateImageTemplates:processedImage];
}

Control返回应用程序View Controller中的方法调用:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    if (buttonIndex == 0){
        [self clearPressed:self.clearButton];
    } else {
        [self.cameraVC generateImageTemplates:self.processedImage];
    }
}

最后,NSNotification回调代码:

- (void)onInnovatricsComplete:(NSNotification *)note
{
    [self.cameraVC willMoveToParentViewController:nil];
    [self.cameraVC.view removeFromSuperview];
    [self.cameraVC removeFromParentViewController];
}

我警告过你这很无聊!

我完全难过!虽然我继续在网上冲浪寻找线索,但有没有人可以帮我解决这个问题?

谢谢。

以下是一些截图(反向顺序):

SIGABRT 2

SIGABRT 1

SIGSTOP Thread Switch

SIGSTOP Lock

Thread details

1 个答案:

答案 0 :(得分:2)

How to know where crash for postNotificationName:object:userInfo

中查看NSUinteger的答案

侦听器在收到通知之前可能会被释放。