您的位置:首页 > 其它

MFC多线程处理:CSemaphore

2017-12-22 10:19 155 查看
MFC多线程处理:CSemaphore

flyfish

写数据最多同时只能运行2个线程,启动3个线程来处理写数据

执行过程:2个线程处理完,再执行第3个线程

声明

UINT WriteA(LPVOID pParam);
UINT WriteB(LPVOID pParam);
UINT WriteC(LPVOID pParam);


实现部分

CSemaphore g_semaphoreWrite(2,2);
CString g_strTextA;
CString g_strTextB;
CString g_strTextC;

UINT WriteA(LPVOID pParam)
{
CEdit *pEdit=(CEdit*)pParam;
pEdit->SetWindowText(_T(""));
g_semaphoreWrite.Lock();
//  WaitForSingleObject(g_semaphoreWrite.m_hObject,INFINITE);

CString n;
for (int i = 0; i<3; i++)
{
n.Format(L"%d", i);
g_strTextA = L"A:" + n;
pEdit->SetWindowText(g_strTextA);
Sleep(1000);
}

//ReleaseSemaphore(g_semaphoreWrite.m_hObject,1,NULL);
g_semaphoreWrite.Unlock();
return 0;
}
UINT WriteB(LPVOID pParam)
{
CEdit *pEdit=(CEdit*)pParam;

pEdit->SetWindowText(L"");
g_semaphoreWrite.Lock();
//WaitForSingleObject(g_semaphoreWrite.m_hObject,INFINITE);

CString n;
for (int i = 0; i<3; i++)
{
n.Format(L"%d", i);
g_strTextB = L"B:" + n;
pEdit->SetWindowText(g_strTextB);
Sleep(1000);
}
g_semaphoreWrite.Unlock();
//ReleaseSemaphore(g_semaphoreWrite.m_hObject,1,NULL);

return 0;
}

UINT WriteC(LPVOID pParam)
{
CEdit *pEdit=(CEdit*)pParam;
pEdit->SetWindowText(_T(""));
g_semaphoreWrite.Lock();
//WaitForSingleObject(g_semaphoreWrite.m_hObject,INFINITE);
CString n;
for(int i=0;i<3;i++)
{
n.Format(L"%d", i);
g_strTextC = L"C:" + n;
pEdit->SetWindowText(g_strTextC);

Sleep(1000);
}
g_semaphoreWrite.Unlock();
//ReleaseSemaphore(g_semaphoreWrite.m_hObject,1,NULL);
return 0;

}

void CXXX::OnBnClickedStart()
{

CWinThread *pWriteA=AfxBeginThread(WriteA,  &m_Edit_ctlA,  THREAD_PRIORITY_NORMAL,  0,  CREATE_SUSPENDED);
pWriteA->ResumeThread();

CWinThread *pWriteB=AfxBeginThread(WriteB,  &m_Edit_ctlB,  THREAD_PRIORITY_NORMAL,  0,  CREATE_SUSPENDED);
pWriteB->ResumeThread();

CWinThread *pWriteC=AfxBeginThread(WriteC,  &m_Edit_ctlC,  THREAD_PRIORITY_NORMAL,  0,  CREATE_SUSPENDED);
pWriteC->ResumeThread();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  多线程