经常在线程中通过signal 和slot来传递如const QString& 或自定义的类对象 const MyData& 时,发现槽不响应,当然也包括信号不传递。
然传递基本类型,如 int ,double ,bool 等这些变量时,信号连接是通的,所以,在这种情况下,如果要传递类对象,建议传递对象的指针。
此时,可能要对这片内存做读写保护。
更安全的方法是:使用qRegisterMetatype去注册这个类,因为Qt对于线程间传递的对象类型只适用于基本数据类型(int,double,bool等),而QString,自定义类型则需要先注册。可以注册成值类型或是引用类型,之后便可值传递或引用传递了,此时使用值传递而非引用才是安全方法,引用毕竟是对另一线程的内在空间的访问,不够安全。
说到共享内在,Qt里有QSharedMemory类作支持,可安全的在不同线程或进程间进行数据共享。这里不述。
评论