2011-12-27 2 views
2

잠시 동안 gtkD로 게임하고 있으며 D2/Phobos를 동시에 배우고 있습니다. 어제는 std.concurrency 모듈을 찾고 장난감 멀티 스레드 프랙탈 뷰어를 작성하려고했지만 문제는 gtkD로 멀티 스레딩이 작동하는 방식을 볼 수 없다는 것입니다.gtkD를 사용하는 다중 스레드 응용 프로그램

지금, 나는이있다 : 동시성의 장에서 안드레이의 책에서

import std.concurrency; 

class TestMainWindow : MainWindow 
{ 
    this() { 
     super("test"); 
     ... 
     spawn(&worker); 
    } 

    public void notify() { 
     m_progress.pulse(); 
    } 

    private ProgressBar m_progress; 
} 

shared(TestMainWindow) window; 

main(string[] args) { 
    Main.init(args); 
    window = new shared(TestMainWindow)(); 
    Main.run(); 
} 

void worker() { 
    for (int i = 0; i < 20; ++i) { 
     (cast(TestMainWindow) window).notify(); 
     Thread.sleep(dur!"msecs"(200)); 
    } 
} 

를, 거기에 적용 내가 할 메시지 전달 패러다임,하지만 문제가있는 GTK 메인 루프가 내게 숨겨져있어. 위의 코드가 마음에 들지 않습니다. 은 공유되지 않고 안전하지 않을 수도 있습니다. "thread-agnostic"클래스를 상속하여 스레드를 인식하도록하는 방법이 있습니까? gtkD의 표준 메커니즘은 멀티 스레드 응용 프로그램을 프로그래밍 할 수 있습니까? gthread.Thread 모듈, 을 보았지만 그 역할은 외부 C gtk + 스레딩 기능에 대한 인터페이스로만 보인다.

+0

D 커뮤니티가 기존 C/C++ 하나의 바인딩이 아닌 순수한 D GUI 툴킷을 사용해야한다고 생각하는 이유입니다. D 대표, 메시지 등은 몇 가지 사항을 염두에 두어야합니다. 이러한 D 기능은 겸손한 의견으로 현대의 D GUI 툴킷에서 활용되어야합니다. – DejanLekic

답변

0

불행히도 저는 대답이 '아니오'라고 확신합니다. GtkD는 공유하기 전에 설계되었으며 D1과 D2를 모두 지원합니다. 또한 공유가 너무 복잡하여 아직 사용할 수 없습니다. 따라서 GtkD는 공유를 지원하지 않으며 잠시 동안 사용하지 않을 것입니다.