0

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

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

我最近一直在处理 UI,我一直在使用以下命令来确保 UI 的每次更新都在被调用时立即发生:

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

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

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

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()尝试启动一个执行函数的 boost 线程myThreadFunction()。但是,myThreadFunction()未达到,因为启动 boost 线程会引发错误。

4

1 回答 1

0

查看手册,我们看到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!)
}

更新:编辑后,我看到您没有加入或分离线程!这是不允许的。

You can put the entire block above literally inside your startMyThread function.

于 2012-09-11T14:29:13.307 回答