我在主线程中显示图片,而在辅线程中对图片进行调整,为防止共享冲突我在两
个线程中都用CSingleLock对共享数据锁定,但在显示时会有停顿,我想知道能不能在显示时知道那个对象(共享数据,因为我显示的是多个对象)被锁定,我好跳过不显示,是否有其他更好的方法。

解决方案 »

  1.   

    给timeout时间:CSingleLock lock(...if (lock.Lock(30))
    {
       ...//显示
    }
    else
    {
       ...//忽略
    }
      

  2.   

    我想知道它锁定了哪一个对象,它不会把所有对象都锁定了吧!
    我是这样用的
    调整
    CDrawImage* pObj = ThreadInfo.pObj (ThreadInfo是共享数据结构)
    ....Lock()
    pObj->ResizeImage()
    ....Unlock()
    显示
    ....Lock()
    pObj->DrawImage()
    ....Unlock()
    我的意思是pObj中哪一个正在被修改
      

  3.   

    每一个对象用一个Mutex做互斥控制,保证不同线程Lock次序一样,用CSingleLock不需要Unlock。
      

  4.   

    stonespace( stonespace):
    "每一个对象用一个Mutex做互斥控制"能不能说详细点,我很菜呀!
    最好给我个例子什么的!
      

  5.   

    用 TRACE( "FORMAT",PARAMETER);在 OUTPUT 中输出,监视
      

  6.   

    stonespace( stonespace):
    老大怎么不回答呀!我很急呀!在线!
      

  7.   

    你是有多个图片?如果一个ThreadInfo中只有一个图片的话,在TreadInfo中加入一个CMutex对象:CMutex类型的ThreadInfo.m_mutex:
    CDrawImage* pObj = ThreadInfo.pObj (ThreadInfo是共享数据结构)
    CSingleLock lock(&ThreadInfo.m_mutex);
    lock.Lock();
    pObj->ResizeImage()显示
    CDrawImage* pObj = ThreadInfo.pObj (ThreadInfo是共享数据结构)
    CSingleLock lock(&ThreadInfo.m_mutex);
    if (lock.Lock(30))
    {
        pObj->DrawImage()
    }ThreadInfo.m_mutex控制对ThreadInfo.pObj的访问,这样就可以保证一个pObj有一个mutex对应,而且只有一个对应。