2012-11-22 16 views
4

我有一个使用Akka框架的Scala/Java OpenGL应用程序。目前,我的OpenGL线程与actor系统是独立的,所以我可以保证对OpenGL函数的调用总是来自单个线程。这很重要,否则OpenGL会抱怨。使用OpenGL与Akka Actor:保证单个线程用于特定角色

到现在为止,我不得不从OpenGL线程发送消息给系统中的角色,并且这种方式非常有效。我现在面临着需要以相反方式发送消息,但是我当然不能简单地将OpenGL放在一个actor中,因为这会打破它从一个线程运行的要求。

另一种方法是手动使用队列和锁定来执行者与OpenGL线程之间的通信,但是我想知道是否有办法将OpenGL调用放置在特殊的Actor中,由Akka保证在单线程中运行。

问候

+1

你可以看到[这是如何为Swing做(https://gist.github.com/2941554)(这需要在事件分派线程渲染的所有工作发生) –

回答

7

您可以使用使用PinnedDispatcher每个演员一个单独的线程。根据文档:

该调度程序为每个使用它的actor使用一个唯一的线程; 即,每个演员将拥有自己的线程池,池中只有一个线程在 。

+0

是否保证这个特殊的演员赢得不会在任何其他线程上运行,或者该线程不会被其他任何演员使用?它可能看起来像一个细节,但在某些情况下它可能很重要... – nietaki

+0

根据文档:是 – paradigmatic

相关问题