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