我在玩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+线程功能的接口。
发布于 2011-12-28 01:58:07
不幸的是,我非常确定答案是否定的。GtkD是在shared出现之前设计的,同时支持D1和D2。此外,共享是如此多的buggy,以至于还不能使用。因此,GtkD不支持共享,可能在一段时间内也不会支持。
https://stackoverflow.com/questions/8646413
复制相似问题