我有两个类,一个CDialog1,一个CMyThread类,在线程类里有一个函数Worker(LPVOID pParam)
在我的CDialog1里有两个控件,我给他门设了两个变量m_board1,m_board2,我在开始线程的时候这样做的
CMyThread *pThread=new CMyThread;
pThread->CreateThread(&m_board1);
pThread->Start();
pThread->CreateThread(&m_board1);
pThread->Start();
这时,Worker函数就分别收到了m_board1和m_board2的地址,传给了pParam,我想在线程里做一个switch 如果pParam收的地址等于m_board1的地址就执行一个命令,如果等于m_board2 的地址就执行另外一个命令
现在问题出来了,怎么样能让pParam  和 m_board1 和 m_board2 分别做地址比较??

解决方案 »

  1.   

    什么控件?
    m_board1,m_board2变量类型是什么?
      

  2.   

    一个自己做的电子表的控件,类型就是个控件类型,不是Value
      

  3.   

    为啥需要pParam  和 m_board1 和 m_board2 分别做地址比较
      

  4.   

    我想你说的控件类型应该是从CWnd类继承的吧! 我提供一个方法,不通过其地址!
    通过通过控件的ID号判断! 下面假设m_board1的ID号为ID_BOARD1,而m_board2的ID号为ID_BOARD2! 则程序如下:CWnd* pWnd = (CWnd*)pParam;
    ASSERT(pWnd);switch(pWnd->GetDlgCtrlID())
    {
      case ID_BOARD1 :
        //进行相关的处理
        break;
      case ID_BORAD2:
        //进行相关的饿处理
        break;
      defualt:
        break;
    }
      

  5.   

    这样了,这个不是你的Worker函数马
    我忘记你的那个电子表控件的类名了,我就叫他CLEDShow吧.
    UINT Worker(LPVOID lparam)
    {
        CLEDShow * m_pLEDshow = (CLEDShow *)lparam;
        //你不是传入两个指针了吗?一个是m_board1和m_board2;
        //你想判断是哪个对不对?那就判断这个窗口的ID好了,就是他的标式了我假设分别是 ID_BOARD1 和 ID_BOARD2吧。
        这样就作
        LONG id = ::GetWindowLong(m_pLEDshow->GetSafeHwnd(),GWL_ID);
        switch(id)
    {
        case ID_BOARD1:
         DO something
         break;
        case ID_BOARD2:
         ....
         break;
    }
    }
    我想差不多吧,你试试看吧。