●●为何我只能同时运行两个线程
我有三个全局函数:
UINT myfun1 (LPVOID pParam)
{
long sum=0;
CString strTmp;
for(int i = 0;i < 50000;i++)
{
sum+=i;
strTmp.Format( "线程1在运行:%d ",sum);
AfxGetApp()-> GetMainWnd()-> GetDlgItem(IDC_TEXT1) -> SetWindowText(strTmp);
}
return 0;
}
UINT myfun2 (LPVOID pParam)
{
int sum=0;
CString strTmp;
for(int i = 0;i < 50000;i++)
{
sum+=i;
strTmp.Format( "线程2在运行:%d ",sum);
AfxGetApp()-> GetMainWnd()-> GetDlgItem(IDC_TEXT2) -> SetWindowText(strTmp);
}
return 0;
}
UINT myfun3 (LPVOID pParam)
{
int sum=0;
CString strTmp;
for(int i = 0;i < 50000;i++)
{
sum+=i;
strTmp.Format( "线程3在运行:%d ",sum);
AfxGetApp()-> GetMainWnd()-> GetDlgItem(IDC_TEXT3) -> SetWindowText(strTmp);
}
return 0;
}
=====================================================================================
想用三个按钮建立线程来运行上面三个函数
void CMyDlg::OnButton1()
{
// TODO: Add your control notification handler code here
AfxBeginThread(myfun1, (LPVOID)AfxGetApp()-> m_pMainWnd-> GetSafeHwnd(), THREAD_PRIORITY_NORMAL);
}
void CMyDlg::OnButton2()
{
AfxBeginThread(myfun2, (LPVOID)AfxGetApp()-> m_pMainWnd-> GetSafeHwnd(), THREAD_PRIORITY_NORMAL);
}
void CMyDlg::OnButton3()
{
AfxBeginThread(myfun3, (LPVOID)AfxGetApp()-> m_pMainWnd-> GetSafeHwnd(), THREAD_PRIORITY_NORMAL);
}
编译后发觉,最多只能同时运行两个线程, 我先按下按扭1,myfun1执行,,,过了一段时间,再按按钮2, myfun2执行,
我想再按按钮3时发觉阻塞了,不能执行myfun3, 一直到myfun1执行完成之后(myfun2仍在执行中...),myfun3才能开始执行
也就是说,同时只能有两个线程同时工作,这是怎么回事?