裕龙花园西区租房:VC 线程同步

来源:百度文库 编辑:九乡新闻网 时间:2024/07/08 17:42:47
CEvent cEvent;
static UINT thread3(LPVOID pParam){CEdit *p=(CEdit*)pParam;char buf[MAX_PATH];for(int i=0;i<20;i++){::SendMessage(p->GetSafeHwnd(),WM_GETTEXT,MAX_PATH,(LPARAM)buf);strcat(buf,"A");::SendMessage(p->GetSafeHwnd(),WM_SETTEXT,0,(LPARAM)buf);Sleep(200);}cEvent.SetEvent();return 0;}static UINT thread4(LPVOID pParam){CEdit *p=(CEdit*)pParam;char buf[MAX_PATH];cEvent.Lock();for(int i=0;i<20;i++){::SendMessage(p->GetSafeHwnd(),WM_GETTEXT,MAX_PATH,(LPARAM)buf);strcat(buf,"B");::SendMessage(p->GetSafeHwnd(),WM_SETTEXT,0,(LPARAM)buf);Sleep(200);}cEvent.SetEvent();return 0;}
CMutex cMutex(FALSE,NULL);static UINT thread3(LPVOID pParam){CEdit *p=(CEdit*)pParam;char buf[MAX_PATH];cMutex.Lock();for(int i=0;i<20;i++){::SendMessage(p->GetSafeHwnd(),WM_GETTEXT,MAX_PATH,(LPARAM)buf);strcat(buf,"A");::SendMessage(p->GetSafeHwnd(),WM_SETTEXT,0,(LPARAM)buf);Sleep(200);}cMutex.UnLock();return 0;}static UINT thread4(LPVOID pParam){CEdit *p=(CEdit*)pParam;char buf[MAX_PATH];cEvent.Lock();for(int i=0;i<20;i++){::SendMessage(p->GetSafeHwnd(),WM_GETTEXT,MAX_PATH,(LPARAM)buf);strcat(buf,"B");::SendMessage(p->GetSafeHwnd(),WM_SETTEXT,0,(LPARAM)buf);Sleep(200);}cMutex.UnLock();return 0;}
CRITICAL_SECTION  hCritial;static UINT thread3(LPVOID pParam){CEdit *p=(CEdit*)pParam;char buf[MAX_PATH];EnterCritialSection(&hCritial);for(int i=0;i<20;i++){::SendMessage(p->GetSafeHwnd(),WM_GETTEXT,MAX_PATH,(LPARAM)buf);strcat(buf,"A");::SendMessage(p->GetSafeHwnd(),WM_SETTEXT,0,(LPARAM)buf);Sleep(200);}LeaveCritialSection(&hCritial);return 0;}static UINT thread4(LPVOID pParam){CEdit *p=(CEdit*)pParam;char buf[MAX_PATH];EnterCritialSection(&hCritial);for(int i=0;i<20;i++){::SendMessage(p->GetSafeHwnd(),WM_GETTEXT,MAX_PATH,(LPARAM)buf);strcat(buf,"B");::SendMessage(p->GetSafeHwnd(),WM_SETTEXT,0,(LPARAM)buf);Sleep(200);}LeaveCritialSection(&hCritial);return 0;}
HANDLE hSema;hSema = CresteSemaphore(NULL,1,1,NULL);static UINT thread3(LPVOID pParam){CEdit *p=(CEdit*)pParam;char buf[MAX_PATH];WaitForSingleObject(hSema,INFINITE);for(int i=0;i<20;i++){::SendMessage(p->GetSafeHwnd(),WM_GETTEXT,MAX_PATH,(LPARAM)buf);strcat(buf,"A");::SendMessage(p->GetSafeHwnd(),WM_SETTEXT,0,(LPARAM)buf);Sleep(200);}ReleaseSemaphore(hSema,1,NULL);return 0;}static UINT thread4(LPVOID pParam){CEdit *p=(CEdit*)pParam;char buf[MAX_PATH];WaitForSingleObject(hSema,INFINITE);for(int i=0;i<20;i++){::SendMessage(p->GetSafeHwnd(),WM_GETTEXT,MAX_PATH,(LPARAM)buf);strcat(buf,"B");::SendMessage(p->GetSafeHwnd(),WM_SETTEXT,0,(LPARAM)buf);Sleep(200);}ReleaseSemaphore(hSema,1,NULL);return 0;}void CEventSynchDlg::OnStartThread3() {AfxBeginThread(thread3,&m_result);}void CEventSynchDlg::OnStartThread4(){AfxBeginThread(thread4,&m_result);} DWORD CCreateMultiThreadDlg::ThreadFunOne(LPVOID lpParam)
{
 WaitForSingleObject(hMutex,INFINITE);
 CCreateMultiThreadDlg* pDlg = (CCreateMultiThreadDlg*)lpParam;
 int low,high,pos;
 pos = pDlg->m_ThreadOne.GetPos(); pDlg->m_ThreadOne.GetRange(low,high); while (pos {
  pos = pDlg->m_ThreadOne.GetPos();
  pDlg->m_ThreadOne.SetPos(pos+1);
 }
 pDlg->m_ThreadOne.SetPos(0);
 return 0;
 ReleaseMutex(hMutex);
} void CCreateMultiThreadDlg::OnCreatethread()
{
 m_hThreadOne = CreateThread(NULL,100,ThreadFunOne,(void*)this,CREATE_SUSPENDED,NULL);
 SetThreadPriority(m_hThreadOne,THREAD_PRIORITY_ABOVE_NORMAL);} void CCreateMultiThreadDlg::OnRunthread()
{
 ResumeThread(m_hThreadOne);} void CCreateMultiThreadDlg::OnSuspendthread()
{
 SuspendThread(m_hThreadOne);}