2013-09-29 80 views
1

我現在正在使用Scala和Akka在使用LWJGL的應用程序中使用。衆所周知,您不能在應用程序主線程之外發布OpenGL調用。如果我想用任何角色進行渲染(例如,單個主要角色,例如,耗盡渲染命令隊列,或者有多個角色可能隨時發出任意OpenGL命令),則會出現問題,因爲我沒有看到一種在特定線程上運行任何actor的方法。通過將特定角色固定到線程,或通過指示角色在某個特定線程上運行。 (一個Objective-C的performSelectorOnMainThread)Pin/Run Akka演員到主線程

有沒有辦法將一個「渲染」actor綁定到主線程,或者在將來的某個點上有任何actor在主線程上運行,能夠發出OpenGL調用? (或者甚至是一些其他的解決方案,我打開思路)

+0

阿卡可能不這是一個很好的用例。雖然它確實提供了您要求的內容,但它僅用於單元測試。 http://doc.akka.io/docs/akka/2.2.1/scala/testing.html#scala-callingthreaddispatcher – Ryan

+0

您可以在主線程中創建一個消息循環,並簡單地使用來自actors的消息。它可以坐在某種'Runnable'的隊列上。 –

回答

0

釘住阿卡演員,你可以使用自定義執行服務配置的執行線程:

akka { 
    ... 
    actor { 
     ... 
     my-dispatcher { 
     executor = "com.github.plokhotnyuk.actors.CustomExecutorServiceConfigurator" 
     } 
    } 
    } 


class CustomExecutorServiceConfigurator(config: Config, prerequisites: DispatcherPrerequisites) extends ExecutorServiceConfigurator(config, prerequisites) { 
    def createExecutorServiceFactory(id: String, threadFactory: ThreadFactory): ExecutorServiceFactory = new ExecutorServiceFactory { 
    def createExecutorService: ExecutorService = myExecutorService() 
    } 
} 

完整的例子就是here