请高手指点void CThreadTestDlg::OnCustomdrawSlider1(NMHDR* pNMHDR, LRESULT* pResult) 
{
// TODO: Add your control notification handler code here
CString sValue="";

edit_value=(12-(float)m_slider.GetPos()/2);//得到的是编辑框中要显示的值
data=pow(10,edit_value/20);//得到将要发给下位机的值
slider_pos=m_slider.GetPos();
FloToHex(0,data);
Send_Addr(addr);
Gain_param(slider_pos,Addr_Gain_In[0],0x01);

sValue.Format("%.1f",edit_value);
SetDlgItemText(IDC_EDIT1,sValue+"dB");
*pResult = 0;
}
这是滑动条的响应函数DWORD WINAPI CThreadTestDlg::ThreadFunc(LPVOID lpParam)
{
CThreadTestDlg*pThread=(CThreadTestDlg*)lpParam;
CByteArray sendbyte;
while(TRUE)
{
const char bVal[13]={0xc3,0xa5,0x0d,0x01,pThread->add[0],pThread->add[1],pThread->Wei,pThread->BarValue[0][0],
pThread->BarValue[0][1],pThread->Hexdat[0][0],pThread->Hexdat[0][1],pThread->Hexdat[0][2],pThread->Hexdat[0][3]};
sendbyte.RemoveAll();
sendbyte.SetSize(13);
for (UINT i=0;i<13;i++)
sendbyte.SetAt(i,bVal[i]);

serial_port.SetOutput(COleVariant(sendbyte));
Sleep(1000);
}
return 0;
}
这是线程函数
我想要实现的是当我滑动slider控件的时候让这个线程开,不滑动的时候这个线程不执行!我该怎么做啊?

解决方案 »

  1.   

    你可以详细点嘛?我以前没弄过,你说在线程中设置一个标志位比如我设置一个BOOL threadRun=FALSE;在上面的while(threadRun)这样写,我控制控件时让threadRun=TRUE;这时线程开了,我不控制控件时怎么关啊  并且要保证我下次控制控件的时候再让它开!
      

  2.   

    请高手鉴定 我这样写合适吗?我实现了上面的功能
    DWORD WINAPI CThreadTestDlg::ThreadFunc(LPVOID lpParam)
    {
    CThreadTestDlg*pThread=(CThreadTestDlg*)lpParam;
    CByteArray sendbyte;
    while(TRUE)
    {
    const char bVal[13]={0xc3,0xa5,0x0d,0x01,pThread->add[0],pThread->add[1],pThread->Wei,pThread->BarValue[0][0],
    pThread->BarValue[0][1],pThread->Hexdat[0][0],pThread->Hexdat[0][1],pThread->Hexdat[0][2],pThread->Hexdat[0][3]};
    sendbyte.RemoveAll();
    sendbyte.SetSize(13);
    for (UINT i=0;i<13;i++)
    sendbyte.SetAt(i,bVal[i]);

    serial_port.SetOutput(COleVariant(sendbyte));
    Sleep(1000);

    SuspendThread(hThread); //让线程挂起  
    }

    return 0;
    }
    void CThreadTestDlg::OnCustomdrawSlider1(NMHDR* pNMHDR, LRESULT* pResult) 
    { //线程离得函数不执行,复杂就给我提个建议就好,简单的话捎给我写一下。
    // TODO: Add your control notification handler code here
    // m_ThreadRun=TRUE;
    CString sValue="";
    ResumeThread(hThread);//结束线程的挂起
    edit_value=(12-(float)m_slider.GetPos()/2);//得到的是编辑框中要显示的值
    data=pow(10,edit_value/20);//得到将要发给下位机的值
    slider_pos=m_slider.GetPos();
    FloToHex(0,data);
    Send_Addr(addr);
    Gain_param(slider_pos,Addr_Gain_In[0],0x01);

    sValue.Format("%.1f",edit_value);
    SetDlgItemText(IDC_EDIT1,sValue+"dB");
    *pResult = 0;
    }
    我刚学线程这里我用了一个SuspendThread(hThread); //让线程挂起
    和ResumeThread(hThread);//结束线程的挂起。函数请高手给我鉴定一下这样合适吗?