【问题标题】:Multithreaded application with gtkD带有 gtkD 的多线程应用程序
【发布时间】:2011-12-27 15:41:23
【问题描述】:

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

【问题讨论】:

  • 这就是为什么我认为 D 社区应该提出一个纯 D GUI 工具包,而不是绑定到现有的 C/C++ 工具包的原因。 D 代表、消息等只是我想到的几件事。在我看来,这些 D 特性应该在现代的 D 图形用户界面工具包中使用。

标签: multithreading d gtkd


【解决方案1】:

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

【讨论】:

  • 7年后,shared现在稳定了吗?任何指针@dsimcha?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-02
  • 1970-01-01
相关资源
最近更新 更多