2013-02-08 34 views
5

Bất cứ ai có thể cho tôi biết là boost::signals các vị trí được gọi đồng bộ hoặc không đồng bộ?Tăng cường :: các khe tín hiệu được gọi là đồng bộ hoặc không đồng bộ?

Ví dụ tôi có đoạn mã này:

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"; 

Cách hoạt động của chủ đề thực hiện? Việc thực hiện có chờ Hello()World() thực thi và ngay sau đó "Foo" được in hay không gọi chúng là không đồng bộ (in "Foo" và gọi Hello()World() thực hiện theo thứ tự chưa được xác định)?

Trả lời

7

Trong Boost.Signals khe được gọi là đồng bộ và khe cắm kết nối với tín hiệu tương tự được gọi theo thứ tự mà chúng được thêm vào. Điều này cũng đúng với biến thể an toàn theo chủ đề, Boost.Signals2

+1

Tài liệu tại đây dường như chỉ định khác: http://www.boost.org/doc/libs/1_54_0/doc/html/signals2/tutorial.html#idp164798944 – sje397

+1

Bạn nói đúng. Tôi đã bị thuyết phục rằng thứ tự không được chỉ định, nhưng phần tài liệu đó đã không thay đổi trong bốn hoặc năm lần phát hành cuối cùng. Tôi đã sửa lại câu trả lời của mình. –

0

Điều này sẽ in "Hello World Foo" nhưng có thể in hợp pháp "World Hello Foo" vì thứ tự cuộc gọi đến nhiều vị trí được kết nối không được xác định AFAIK.

Nếu bạn muốn nghiêm ngặt để sử dụng cú pháp sau:

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

Tôi hiểu nhưng điều tôi cần biết là nếu có bất kỳ cơ hội in 'Foo Hello World' hoặc' Hello Foo World' hoặc 'World Foo Hello' hoặc bất kỳ xen kẽ giữa 'Foo' và các khe. Các khe có thể thực thi không đồng bộ hay không? –

Các vấn đề liên quan