线程间通信 1全局变量2当前主对话框指针3发消息方式4 AfxBeginThread的返回值(为CWinThread类型的指针)5AfxGetApp
![](https://images2015.cnblogs.com/blog/751322/201603/751322-20160320230146443-2113396845.jpg)
①、最常用的方式:全局变量或者多个线程都能看到的一个东东
1、全局变量方式;
int g_Num = 100;
UINT __cdecl ThreadWriteProc(LPVOID lpParameter)
{
while(TRUE) {
++g_Num;
Sleep(50);
}
return 100;
}
UINT __cdecl ThreadReadProc(LPVOID lpParameter)
{
CString strTipMsg;
while(TRUE) {
strTipMsg.Format(_T("%d"), g_Num);
OutputDebugString(strTipMsg);
Sleep(50);
}
return 100;
}
void CThreadTestDlg::OnBnClickedBtn()
{
CWinThread *pThread = AfxBeginThread(ThreadWriteProc, NULL);
AfxBeginThread(ThreadReadProc, NULL);
}
2、大家都能访问到的一个东东;
3、全局变量的声明方式;
===================================================
②、发消息方式:PostThreadMessage
#define MY_THREAD_MSG (WM_USER+100)
UINT __cdecl ThreadWriteProc(LPVOID lpParameter)
{
int nCount = 0;
DWORD dwThreadReadID = (DWORD)lpParameter;
while(TRUE) {
PostThreadMessage(dwThreadReadID, MY_THREAD_MSG, nCount++, NULL);
Sleep(50);
}
return 0;
}
UINT __cdecl ThreadPrintProc(LPVOID lpParameter)
{
MSG msg = {0};
while(GetMessage(&msg, 0, 0, 0))
{
switch(msg.message) {
case MY_THREAD_MSG:
{
int nCount = (int)msg.wParam;
CString strText;
strText.Format(_T("%d"), nCount);
OutputDebugString(strText);
}
break;
}
}
return 0;
}
void CThreadTestDlg::OnBnClickedBtn()
{
CWinThread *pThreadPrint = AfxBeginThread(ThreadPrintProc, NULL);
CWinThread *pThreadWrite = AfxBeginThread(ThreadWriteProc, (LPVOID)pThreadPrint->m_nThreadID);//
当前线程的ID。 |
}
===================================================
![](bd8fc982-a200-4fc5-abb3-75e676044371_files/1704543140.jpg)