尝试启动Boost线程时出错

时间:2012-09-11 14:10:07

标签: iphone xcode multithreading boost

我已经在我的iPhone应用程序中使用了Boost线程一段时间了,并且偶然发现了一个问题。每隔一段时间,当应用程序尝试启动这样一个线程时,它会在尝试调用start_thread()时抛出错误,并且应用程序崩溃。

我真的不知道从哪里开始调试这个 - 从调试器看起来不明显为什么不能初始化boost线程。应该注意的是,这只发生在应用程序运行一段时间后,以及几个线程已经成功启动之后。

我最近一直在使用UI,我一直在使用以下命令来确保在调用时立即对UI进行每次更新:

[myViewController performSelectorOnMainThread : @ selector(show_myButton) withObject:nil waitUntilDone:YES];

虽然该命令似乎有效,并且UI立即更新(在它被推迟之前),但我担心它可能会导致我遇到的提升线程问题。听起来有可能吗?有没有人经历过这样的事情,并对可能出现的问题有任何建议?

这是用于启动线程的代码:

void ObjectiveCPlusPlusInterface::startMyThread(void* a, myObject* b)
{
 boost::thread AVPlayerThread = boost::thread(&ObjectiveCPlusPlusInterface::myThreadFunction, this, a, b);
}

(其中a& b是变量)

void ObjectiveCPlusPlusInterface::myThreadFunction(void* a, myObject* b)
{
 ...
}

如您所见,startMyThread()尝试启动一个执行函数myThreadFunction()的boost线程。但是,未达到myThreadFunction(),因为启动boost线程会引发错误。

1 个答案:

答案 0 :(得分:0)

查看at the manual,我们发现boost::thread构造函数可以抛出异常。请务必检查:

try
{
    boost::thread AVPlayerThread(&ObjectiveCPlusPlusInterface::myThread, this, a, b);

    AVPlayerThread.detach();   // or join()?
}
catch (boost::thread_resource_error const &)
{
    // resource error (print a diagnostic!)
}
catch (...)
{
    // some other exception (print a diagnostic!)
}

更新:编辑完成后,我发现您没有加入或分离该帖子!这是不允许的。

您可以将整个块放在startMyThread函数内。