2

我正在玩 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+ 线程功能的接口。

4

1 回答 1

0

不幸的是,我很确定答案是否定的。GtkD 是在共享存在之前设计的,并且支持 D1 和 D2。此外,shared 有很多问题,现在还不能使用。因此,GtkD 不支持共享,可能暂时不会。

于 2011-12-27T17:58:06.640 回答