2011-04-21 42 views
0

在我的应用程序中,我有两个线程,第一个是gui线程,其中我有代码,当用户按下每个按钮时调用 。线程间'沟通'问题

在第二个线程我有视频录制机制,我可以开始,捕获,追加(记录)视频到文件。

当我尝试从第一个线程开始录制时出现问题 - 它崩溃了。 所以我必须在gui线程中设置某种布尔'通信标志',然后在视频线程中检查它们 ,然后从视频线程'记录视频'。

这样的标志很糟糕我认为 - 什么是一种简单而恰当的方式来做到这一点?

+0

将控制台放在这里和一些代码。 – 2011-04-21 08:42:03

回答

2

这是一个相当广泛的话题,你在那里触摸。可可确实包含了一些有用的线程间通信方法。你可能想看看

[NSObject performSelector:onThread:withObject:waitUntilDone:] 

这只有在第二个线程中运行NSRunLoop时才有效。否则,在您的视频录制课程中有一个bool @property。这将是你建议的旗帜。从主线程更改其值,并检查记录循环中辅助线程的值以执行操作。

不要忘记你的@property声明需要是原子的。

您可能也想使用NSOperationQueue或块,从您的问题很难告诉什么是最好的。我想,也取决于你的编码偏好。

+0

你能说我提到的两个metods哪个更好吗? – 2011-04-21 08:47:25

+0

在我看来,这个线程我想执行选择器不是主线程 - 你不知道,也许如何获得NSThraed *这个? – 2011-04-21 08:56:26

+0

不,它确实取决于你的应用程序......但是依赖性最小的方法是在工作分类中使用原子@property。 – 2011-04-21 09:43:53