2011-11-19 62 views
0

我在QThread派生类中有2个槽处理程序:一个是定时器处理程序,另一个只是异步回调处理程序。两者都必须修改相同的数据。同步QThread中的插槽 - ?

struct somedata { 
    int max; 
    int min; 
    double avg; 
} 

... 

class MyThread: QThread { 

private: 
    somedata m_data; 

private Q_SLOTS: 
    void asyncCallback(int a, int b) { 
     m_data.max += a; 
     m_data.min += b; 
    } 

    void timer() { 
     m_data.avg =(m_data.a + m_data.b)/2; 
    } 

} 

应该以某种方式对m_data进行序列化,尽管这两种方法都在同一个线程中? 谢谢,

回答

0

只要您可以保证您的数据只能在任何时候被单个线程访问或修改,那么您就不需要通过线程安全构造来同步对数据的访问。

验证此方法的一种方法是在调用函数时检查QThread的静态currentThread()函数的返回值。

0

如果两种功能都由同一线程调用那么你不需要担心数据得到变化的时候,其他的呼叫是在第二slot.If你不知道的话,最好的选择是在使用互斥两个插槽,以便只有一个进程或更改m_data的值。