2013-09-29 3 views
1

현재 LWJGL을 사용하는 응용 프로그램에서 Scala와 Akka를 사용하고 있습니다. 일반적으로 알려진 것처럼 OpenGL 호출을 응용 프로그램의 기본 스레드 외부에서 실제로 호출 할 수는 없습니다. 이것은 보지 못했던 렌더링을 위해 액터를 사용하려는 경우 (예를 들어, 렌더링 명령 대기열을 소모하는 단일 주 행위자 또는 임의의 OpenGL 명령을 발행 할 수있는 여러 액터가있는 경우) 문제가됩니다. 특정 스레드에서 임의의 액터를 실행하는 방법. 특정 액터를 스레드에 고정하거나 특정 시점에 액터가 특정 스레드에서 실행되도록 지시합니다. (라 목표 - C의 performSelectorOnMainThread)Pin/Run Akka Actor to Main Thread

미래의 어떤 시점에서 메인 스레드에 "렌더링"배우 핀, 또는 주 스레드에서 어떤 배우 실행을 할 수있는 방법이있는 것이 될 것입니다 포인트, 거기에 OpenGL 호출을 발행 할 수 있습니까?

+0

Akka는 그렇지 않을 수 있습니다 이것을위한 아주 좋은 유스 케이스가되어야한다. 당신이 요구하는 것을 제공하는 반면, 그것은 단위 테스트에만 사용하도록되어 있습니다. http://doc.akka.io/docs/akka/2.2.1/scala/testing.html#scala-callingthreaddispatcher – Ryan

+0

메인 스레드에서 메시지 루프를 만들고 단순히 액터의 메시지를 소비 할 수 있습니다. 어떤 종류의'Runnable' 큐에 있을지도 모릅니다. –

답변

0

는 사용자 정의 실행기 서비스 구성을 사용할 수 있습니다 Akka 배우의 실행 스레드 고정하려면 (또는 다른 솔루션, 나는 아이디어에 열려있어) :

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

관련 문제