2013-02-08 37 views
5

क्या कोई मुझे बता सकता है कि boost::signals स्लॉट सिंक्रनाइज़ या असीमित रूप से बुलाए गए हैं?बढ़ावा हैं :: सिग्नल स्लॉट सिंक्रनाइज़ या असीमित रूप से बुलाया जाता है?

उदाहरण के लिए मैं कोड के इस टुकड़े है:

struct Hello 
{ 
    void operator()() const 
    { 
    std::cout << "Hello "; 
    } 
}; 

struct World 
{ 
    void operator()() const 
    { 
    std::cout << " world!" << std::endl; 
    } 
}; 

boost::signal<void()> sig; 

sig.connect(Hello()); 
sig.connect(World()); 

sig(); 

cout << "Foo"; 

कैसे निष्पादन धागा काम करता है? क्या निष्पादन Hello() और World() निष्पादित करने के लिए प्रतीक्षा करता है और उसके बाद "Foo" मुद्रित किया जाता है या फिर यह उन्हें असीमित रूप से कॉल करता है (प्रिंटिंग "फू" और Hello() और World() को एक अपरिभाषित क्रम में निष्पादित करता है)?

उत्तर

7

Boost.Signals में स्लॉट्स तुल्यकालिक कहा जाता है और एक ही संकेत से जुड़ा स्लॉट्स वे किस क्रम में जोड़ा गया था में कहा जाता है। यह थ्रेड-सुरक्षित संस्करण, Boost.Signals2

+1

यहां दस्तावेज़ अन्यथा इंगित करते हैं: http://www.boost.org/doc/libs/1_54_0/doc/html/signals2/tutorial.html#idp164798944 – sje397

+1

आप सही हैं। मुझे विश्वास था कि आदेश निर्दिष्ट नहीं किया गया था, लेकिन दस्तावेज का वह हिस्सा पिछले चार या पांच रिलीज में नहीं बदला है। मैंने अपना जवाब सही किया। –

0

इसे "हैलो वर्ल्ड फू" प्रिंट करना चाहिए लेकिन कानूनी रूप से "वर्ल्ड हैलो फू" प्रिंट कर सकता है क्योंकि एकाधिक कनेक्टेड स्लॉट्स को कॉल का ऑर्डर AFAIK परिभाषित नहीं किया गया है।

आप सख्त आदेश उपयोग इस वाक्य रचना चाहते हैं:

sig.connect(1, World()); 
sig.connect(0, Hello()); 
+0

मैं समझता हूं लेकिन मुझे यह जानने की आवश्यकता है कि 'फू हैलो वर्ल्ड' या 'हैलो फू वर्ल्ड' या 'वर्ल्ड फू हैलो' या कोई भी प्रिंट करने का कोई मौका है या नहीं 'फू' और स्लॉट के बीच अंतरण। क्या स्लॉट असीमित रूप से निष्पादित हो सकते हैं या नहीं? –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^