使用gtkD的多线程应用程序

时间:2011-12-27 15:41:23

标签: multithreading d gtkd

我正在玩gtkD一段时间,我正在学习D2 / Phobos并行。昨天我正在查找std.concurrency模块并试图编写一个玩具多线程分形查看器,但问题是我看不到多线程与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));
    }
}

在Andrei的书中,在并发章节中,有消息传递范式,我想要 应用,但问题是gtk主循环对我隐藏。我不喜欢上面的代码,因为它 难以投射到非共享且可能不安全。 那么是否有一些方法可以继承“线程无关”类,使其具有线程感知能力,以及它是什么 gtkD中的标准机制来编写多线程应用程序?我见过gthread.Thread模块, 但它的作用似乎只是作为外部C gtk +线程功能的接口。

1 个答案:

答案 0 :(得分:0)

不幸的是,我很确定答案是肯定的。 GtkD是在共享存在之前设计的,并且支持D1和D2。此外,共享是如此错误,它还不可用。因此,GtkD不支持共享,可能暂时不会支持。