2011-12-27 3 views
2

Я играю с 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 +.

+0

Именно поэтому я думаю, что сообщество D должно придумать набор инструментов D GUI, а не привязку к существующему C/C++. D делегатов, сообщений и т. Д. Всего лишь несколько вещей, которые приходят на ум. По моему скромному мнению, эти D-функции должны использоваться в современном наборе инструментов D, GUI. – DejanLekic

ответ

0

К сожалению, я уверен, что ответ отрицательный. GtkD был разработан до того, как существовал общий доступ, и поддерживает как D1, так и D2. Кроме того, общий доступ к такой ошибке неэффективен. Поэтому GtkD не поддерживает общий доступ и, вероятно, пока не будет.

Смежные вопросы