【发布时间】: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