我已经在我的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线程会引发错误。
答案 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
函数内。