2011-12-27 35 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主循環對我來說是隱藏的。我不喜歡上面的代碼,因爲它的 很難投給非共享並且可能不安全。 那麼是否有某種方法來繼承「線程無關」的類,使其線程感知,以及gtkD中的標準機制是什麼以編程多線程應用程序?我見過gthread.Thread模塊, ,但它的作用似乎只是作爲外部C gtk +線程功能的接口。

+0

這正是我認爲D社區應該拿出一個純D GUI工具包的原因,而不是一些綁定到現有的C/C++工具包。 D代表,消息等只是幾個想到的東西。我認爲這些D功能應該被用在一個現代的D,GUI工具箱中。 – DejanLekic 2011-12-27 16:23:03

回答

0

不幸的是我很肯定答案是否定的。 GtkD在共享之前設計並支持D1和D2。此外,共享是如此錯誤,它不可用。因此,GtkD不支持共享,可能暫時不會。