一个多线程的问题,请高手看看
头文件中:
public:
CProgressCtrl m_progressctrl;
CProgressCtrl m_progressctrl2;
public:
afx_msg LRESULT OperatePrgessOne(WPARAM wParam,LPARAM lParam);
afx_msg LRESULT OpeatePrgessTwo(WPARAM wParam,LPARAM lParam);
源文件中
全局:
#define OPERATEPGRONE WM_USER + 100
#define OPERATEPGRTWO WM_USER + 101
HANDLE thread1;
HANDLE thread2;
HANDLE thread0;
DWORD WINAPI mainfun(LPVOID pParam); //线程函数
DWORD WINAPI asstfun(LPVOID pParam);
HWND g_hwnd;
int nCount = 0;
.....
ON_MESSAGE(OPERATEPGRONE,OperatePrgessOne)
ON_MESSAGE(OPERATEPGRTWO,OpeatePrgessTwo)
.....
void CMultiplyThreadProDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
//OnOK();
g_hwnd = GetSafeHwnd();
thread1 = CreateThread(NULL,0,mainfun,0,0,NULL);
thread2 = CreateThread(NULL,0,asstfun,0,0,NULL);
thread0 = CreateMutex(NULL,TRUE,NULL);
CloseHandle(thread1);
CloseHandle(thread2);
Sleep(5000);
CDialog::OnOK();
}
LRESULT CMultiplyThreadProDlg::OperatePrgessOne( WPARAM wParam,LPARAM lParam )
{
for (int i=0;i<100;i++)
{
m_progressctrl.SetPos(i);
}
return 1L;
}
LRESULT CMultiplyThreadProDlg::OpeatePrgessTwo( WPARAM wParam,LPARAM lParam )
{
for (int i=0;i<100;i++)
{
m_progressctrl2.SetPos(i);
}
return 1L;
}
DWORD WINAPI mainfun( LPVOID pParam )
{
HWND hwnd ;
hwnd = (HWND)pParam;
while(nCount<5)
{
WaitForSingleObject(thread0,5000);
SendMessage(g_hwnd,OPERATEPGRONE,0,0);
Sleep(100);
nCount++;
ReleaseMutex(thread0);
}
return 0;
}
DWORD WINAPI asstfun(LPVOID pParam)
{
while(nCount<5)
{
WaitForSingleObject(thread0,5000);
SendMessage(g_hwnd,OPERATEPGRTWO,0,0);
Sleep(100);
nCount++;
ReleaseMutex(thread0);
}
return 0;
}
编译能通过,但是无法实现两个进度条同时运动在效果,我分步调试,发现消息响应函数进不去,无论for循环中sleep多少秒都没用。
请高手指点