/ / जीटीकेडी के साथ बहु आवेदन पत्र - मल्टीथ्रेडिंग, डी, जीटीकेडी

GtkD के साथ बहुप्रचारित अनुप्रयोग - multithreading, डी, gtkd

मैं थोड़ी देर के लिए 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));
}
}

के लिए अध्याय में आंद्रेई की किताब मेंसंगामिति, संदेश पारित होने वाला प्रतिमान है, जिसे मैं चाहता हूं लागू करें, लेकिन समस्या यह है कि gtk मुख्य लूप मुझसे छिपा हुआ है। मैं "उपरोक्त कोड की तरह नहीं है, क्योंकि इसकी बदसूरत से गैर-साझा और संभावित असुरक्षित के लिए कास्ट करने के लिए। तो क्या एक "थ्रेड-अज्ञेयवादी" वर्ग को विरासत में लेने का कोई तरीका है, जो इसे थ्रेड-अवेयर बनाता है और जो है जीटीकेडी में मानक तंत्र मल्टीथ्रेडेड एप्लिकेशन को प्रोग्राम करने के लिए? मैंने gthread.Thread मॉड्यूल देखा है, लेकिन इसकी भूमिका केवल बाहरी C gtk + थ्रेडिंग क्षमताओं के इंटरफ़ेस के रूप में प्रतीत होती है।

उत्तर:

जवाब के लिए 0 № 1

दुर्भाग्य से मैं बहुत यकीन है कि जवाब नहीं है। GtkD को साझा किए जाने से पहले डिज़ाइन किया गया था और D1 और D2 दोनों का समर्थन करता है। इसके अलावा, साझा इतना छोटा है कि यह अभी तक प्रयोग करने योग्य नहीं है। इसलिए, GtkD doesn "t समर्थन साझा किया है और शायद थोड़ी देर के लिए टी जीता"।