Я играю с gtkD некоторое время, и я параллельно изучаю D2/Phobos. Вчера я просмотрел модуль std.concurrency и попытался написать игрушечный многопоточный редактор фракталов, но проблема в том, что я не вижу, как многопоточность работает с gtkD.Многопоточное приложение с 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));
}
}
В книге Андрея, в главе параллелизма, есть передачи сообщений парадигмы, которую я хочу применить, но проблема в том, что GTK основного цикл скрыта от меня. Мне не нравится приведенный выше код, потому что его уродливый, чтобы бросить на не-общий и, вероятно, небезопасный. Итак, есть ли способ унаследовать класс «thread-agnostic», что делает его известным для потоков, и что такое стандартный механизм в gtkD для программирования многопоточных приложений? Я видел модуль gthread.Thread, , но его роль, по-видимому, является только интерфейсом для внешних возможностей потоковой передачи C gtk +.
Именно поэтому я думаю, что сообщество D должно придумать набор инструментов D GUI, а не привязку к существующему C/C++. D делегатов, сообщений и т. Д. Всего лишь несколько вещей, которые приходят на ум. По моему скромному мнению, эти D-функции должны использоваться в современном наборе инструментов D, GUI. – DejanLekic