mfc_ThreadMutex - 8BitsCoding/RobotMentor GitHub Wiki
Multithread์ฌ์ฉ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๊ฐ ์กด์ฌ
Workerthread
Workerthread๋ ๊ฒฐ๊ตญ
AfxBeginThread
๋ฅผ ์ด์ฉํ๋ค.
์ฌ์ฉ
CWinThread *pThread = ::AfxBeginThread(ThreadFunc, &pParams);
// ThreadFunc : ์ค๋ ๋๊ฐ ๋์๊ฐ ํจ์
// pParams : ThreadFunc์ ๋งค๊ฐ๋ณ์
AfxBeginThread์ ์์ฑ์
CWinThread* ::AfxBeginThread(
AFX_THREADPROC pfnThreadProc,
LPVOID pParam,
int nPriority = THREAD_PRIORITY_NORMAL, // ๊ธฐ๋ณธ์ ์ผ๋ก ์ฃผ Process์ ๋์ผ
UINT nStackSize = 0,
DWORD dwCreateFlags = 0, // 0 ๋๋ CREATE_SUSPENDED
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
);
Thread ํจ์ ์ ์ธ
// static์ด ์ ์ธ๋์ด ์์ด์ผํจ์ ๊ธฐ์ต
static UINT ThreadFunc(LPVOID pParam)
{
int option = (int)pParam;
โฆ
}
Thread ๋งค๊ฐ๋ณ์ ์ ์ธ
// ๋ง์ฝ ์ธ์๊ฐ ๋ง์ ๊ฒฝ์ฐ์๋
typedef struct tagPARAMS
{
...
} PARAMS;
// ์ ๊ฐ์ด ํ ํ์
PARAMS *pParams = new PARAMS;
CWinThread *pThread = ::AfxBeginThread(ThreadFunc, &pParams);
static UINT ThreadFunc(LPVOID pParam)
{
PARAMS *pThreadParams = (PARAMS *)pParam;
...
delete pThreadParams;
return 0;
}
Thread ์ผ์ ์ค์งํ๊ณ ์ถ์ ๊ฒฝ์ฐ
//Thread๋ฅผ ์ ์ ์ค์ง์ํค๊ณ ์ถ์ ๋๋ ์ฃผ Process์์
pThread->SuspendThread();
//๋ค์ ๋๋ฆฌ๊ณ ์ถ์ ๋๋ ์ฃผ Process์์
pThread->ResumeThread();
Thread ์ค์ง ์ํค๊ธฐ
UINT ThreadPrintNum(LPVOID pParam)
{
BOOL *pbContinue = (BOOL *)pParam;
while ( *pbContinue )
{
โฆ
}
return 0;
}
// ์ธ๋ถ์์ pbContinue๋ฅผ false์ํจ๋ค.
Thread๊ฐ ์์ ํ ์ฃฝ์๋์ง ํ์ธ
DWORD result;
result = ::WaitForSingleObject(pThread->m_hThread, 1000); // 1์ด๊ธฐ๋ค๋ฆผ
if ( result == WAIT_OBJECT_0 )
{
// ์ด๊ณณ์์ฐ๋ ๋๊ฐํ์คํ์ข
๋ฃ๋์ํ์
}
else if ( result == WAIT_TIMEOUT )
{
// 1์ด๊ฐ์ง๋๋์ฐ๋ ๋๊ฐ์ข
๋ฃ๋์ง์์์ํ
}
Userthread
class CUIThread : public CWinThread
{
DECLARE_DYNCREATE(CUIThread)
public:
virtual BOOL InitInstance();
};
IMPLEMENT_DYNCREATE(CUIThread, CWinThread)
BOOL CUIThread::InitInstance()
{
m_pMainWnd = new CMyDialog;
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
}
CWinThread *pThread = ::AfxBeginThread(RUNTIME_CLASS(CUIThread));
CMyDialog::CMyDialog(CWnd* pParent /*=NULL*/)
: CDialog(CMyDialog::IDD, pParent)
{
Create(IDD_MYDIALOG, NULL);
}
์ด์ ์์ ํ ๋ณ๋๋ก ๋์ํ๋(Thread๋ก ๋์ํ๋) ์๋์ฐ๋ฅผ ํ๋ ๊ฐ์ง๋ ๊ฒ์ด๋ค.