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