Wednesday, May 20, 2015

Signal-slot là một cơ chế để thực hiện việc một object này thông báo một sự kiện đến một object khác theo cơ chế tương tự như interrupt.


Các đối tượng muốn signal-slot được với nhau cần có một đăng ký kết nối trước, một object có thể cùng lúc có nhiều kết nối đến nhiều object khác, lưu ý định dạng dữ liệu giữa bên phát và nhận phải giống nhau.



Khai báo class signal:
 class Button:public sigslot::has_signals<Button>  
 {  
   //attributes  
   //methods  

 public __signals:  
   sigslot::signal<char*> touchEvent;  
 };  

Khai báo class slot:
 class View:public sigslot::has_slots<>  
 {  
   //attributes  
   //methods  
   
 public __slots:  
   void onUpdate(char *msg){  
     cout << "recvmsg: " << msg <<endl;  
   }  
 };   

Khai báo class vừa phát vừa nhận
 class TransRecv:public sigslot::has_signals<TransRecv> , sigslot::has_slots<>  
 {  
     //attributes  
     //methods  
   
 public __signals:  //phat signal cho object A 
      sigslot::signal<char *> touchPoint;  
   
 public __slots:    //nhan signal tu object B 
      void onUpdate(float fdata, int idata);  
 };  


Duới đây là một ví dụ:
sigslot.h (định nghĩa cơ chế signal-slot của QT Framework)
main.cpp
 #include <iostream>  
 #include "sigslot.h"  
   
 using namespace std;  
   
 class Button:public sigslot::has_signals<Button>  
 {  
 public:  
   Button(){ };  
   virtual ~Button(){ };  
   
   void onClick(){  
     touchEvent.emit((char*)"Hello, I am button");  
   }  
   
 public __signals:  
   sigslot::signal<char*> touchEvent;  
   
 };  
   
 class View:public sigslot::has_slots<>  
 {  
 public:  
   View(){ };  
   virtual ~View(){ };  
   
 public __slots:  
   void onUpdate(char *msg){  
     cout << "recvmsg: " << msg <<endl;  
   }  
 };  
   
 int main(int argc, char **argv){  
   
   Button btn;  
   View view;  
   
   btn.touchEvent.connect(&view, &View::onUpdate);  
   btn.onClick();  
   return 1;  
 }  
   

Compile & Execute:
 $ g++ sigslot.h main.cpp   
 $ ./a.out   
 recvmsg: Hello, I am button  
   



Leave a Reply

Subscribe to Posts | Subscribe to Comments

- Copyright © Lập trình hệ thống nhúng Linux . Powered by Luong Duy Ninh -