私はしばらくの間 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+ スレッド機能へのインターフェースとしてのみのようです。