2011-12-27 84 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不支持共享,可能暂时不会。