我正在尝试将C控制台程序移植到iPhone。我已将所有代码导入到我的项目中,并且当用户单击UI上的按钮时,我在NSOperation中将其称为main()。

无论如何,该程序很复杂,并创建了许多自己的线程。该程序也多次调用“exit()”-这会使整个iPhone应用程序崩溃,但我确实希望用户能够重启C程序。

我一直在努力清理这些退出条件,并且在C程序创建的某些子线程中使用了pthread_exit()。但是,当我在从NSOperation对象创建的线程中调用pthread_exit()时,应用程序的主线程得到SIGABRT信号,整个应用程序崩溃。

我是否正确评估了情况?我是iOS编程的新手,所以这个信号可能来自其他地方。如果我是对的,那么解决此问题的最佳方法是什么?

(哦,关于使用“return 0”退出此NSOperation线程:我想从中退出的条件嵌套在C程序函数的深处,我想避免更改程序的结构,因为它已经非常复杂了)

在此先感谢您的帮助!

最佳答案

NSOperationQueue在GCD队列上执行其操作。当那些线程在pthreads上执行其作业时,这些线程是GCD专用的,并且不允许您使用pthread API修改或退出它们。有关Compatibility with POSIX Threads的文档,其中明确说明了允许使用哪些pthread函数,哪些不允许。

为了解决您的问题,您可能不应该让pthread代码在NSOperationQueue上运行,而应在为此创建的新POSIX线程上运行。

关于iphone - iOS-移植C程序:在NSOperation作业中调用pthread_exit(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12062264/

10-11 23:17
查看更多