C++다 중 스 레 드 프로 그래 밍(3)스 레 드 간 통신
원본 주소:http://www.vckbase.com/document/viewdoc/?id=1707
7.스 레 드 간 통신
일반적으로 응용 프로그램의 부차적인 라인 은 항상 주 라인 에서 특정한 임 무 를 수행한다.그러면 주 라인 과 부차적인 라인 사이 에는 반드시 정보 전달 의 채널,즉 주 라인 과 부차적인 라인 간 에 통신 을 해 야 한다.이러한 스 레 드 간 의 통신 은 피 할 수 없 을 뿐만 아니 라 다 중 스 레 드 프로 그래 밍 에서 도 복잡 하고 빈번 하 므 로 다음 에 설명 할 것 이다.
루틴 7 MultiThread 7
이 규칙 은 사용자 정의 메 시 지 를 사용 하여 스 레 드 간 통신 을 하 는 방법 을 보 여 준다.우선,메 인 코스 는 CCalculate Thread 스 레 드 에 메 시 지 를 보 냅 니 다 WMCALCULATE,CCalculate Thread 스 레 드 가 메 시 지 를 받 은 후 계산 하여 메 인 스 레 드 에 WM 를 보 냅 니 다.DISPLAY 메시지,메 인 스 레 드 가 이 메 시 지 를 받 은 후 계산 결 과 를 표시 합 니 다.
protected:
int nAddend;
은 가수의 크기 를 대표 합 니 다.각각 세 개의 체크 단 추 를 더 블 클릭 하고 메시지 응답 함 수 를 추가 합 니 다.void CMultiThread7Dlg::OnRadio1()
{
nAddend=10;
}
void CMultiThread7Dlg::OnRadio2()
{
nAddend=50;
}
void CMultiThread7Dlg::OnRadio3()
{
nAddend=100;
}
OnInitDialog :
BOOL CMultiThread7Dlg::OnInitDialog()
{
……
((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);
nAddend=10;
……
MultiThread7Dlg.h 에 추가 합 니 다.#include "CalculateThread.h"
#define WM_DISPLAY WM_USER+2
class CMultiThread7Dlg : public CDialog
{
// Construction
public:
CMultiThread7Dlg(CWnd* pParent = NULL); // standard constructor
CCalculateThread* m_pCalculateThread;
……
protected:
int nAddend;
LRESULT OnDisplay(WPARAM wParam,LPARAM lParam);
……
MultiThread7Dlg.cpp :
BEGIN_MESSAGE_MAP(CMultiThread7Dlg, CDialog)
……
ON_MESSAGE(WM_DISPLAY,OnDisplay)
END_MESSAGE_MAP()
LRESULT CMultiThread7Dlg::OnDisplay(WPARAM wParam,LPARAM lParam)
{
int nTemp=(int)wParam;
SetDlgItemInt(IDC_STATUS,nTemp,FALSE);
return 0;
}
이상 코드 를 사용 하면 메 인 라인 클래스 CMulti Thread7Dlg 가 WM 를 처리 할 수 있 습 니 다.DISPLAY 소식,즉 IDCSTATUS 탭 상자 에 계산 결 과 를 표시 합 니 다.void CMultiThread7Dlg::OnSum()
{
m_pCalculateThread=
(CCalculateThread*)AfxBeginThread(RUNTIME_CLASS(CCalculateThread));
Sleep(500);
m_pCalculateThread->PostThreadMessage(WM_CALCULATE,nAddend,NULL);
}
OnSum() CalculateThread , WM_CALCULATE 。
#define WM_CALCULATE WM_USER+1
class CCalculateThread : public CWinThread
{
……
protected:
afx_msg LONG OnCalculate(UINT wParam,LONG lParam);
……
CalculateThread.cpp
LONG CCalculateThread::OnCalculate(UINT wParam,LONG lParam)
{
int nTmpt=0;
for(int i=0;i<=(int)wParam;i++)
{
nTmpt=nTmpt+i;
}
Sleep(500);
::PostMessage((HWND)(GetMainWnd()->GetSafeHwnd()),WM_DISPLAY,nTmpt,NULL);
return 0;
}
BEGIN_MESSAGE_MAP(CCalculateThread, CWinThread)
//{{AFX_MSG_MAP(CCalculateThread)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
ON_THREAD_MESSAGE(WM_CALCULATE,OnCalculate)
// ,
END_MESSAGE_MAP()
Calculate Thread.cpp 파일 의 시작 부분 에 하 나 를 추가 합 니 다:#include "MultiThread7Dlg.h"
이상 의 코드 는 CCalculate Thread 클래스 에 WM 를 추 가 했 습 니 다.CALCULATE 메시지,메시지 의 응답 함 수 는 OnCalculate 입 니 다.그 기능 은 매개 변수 wParam 의 값 에 따라 누적 되 고 누적 결 과 는 임시 변수 nTmpt 에서 0.5 초 지연 되 며 메 인 스 레 드 에 WM 을 보 내 는 것 입 니 다.DISPLAY 메 시 지 를 표시 합 니 다.nTmpt 는 매개 변수 로 전 달 됩 니 다.이 규칙 을 컴 파일 하고 실행 하여 온라인 으로 메 시 지 를 전달 하 는 방법 을 체험 합 니 다.
(미 완성 계속)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 다 중 스 레 드 메커니즘 의 스 레 드 생 성target 을 실행 대상 으로 지정 한 name 을 이름 으로 하고 group 에서 참조 하 는 스 레 드 그룹의 일원 으로 새 Thread 대상 을 할당 합 니 다. 이 스 레 드 가 독립 된 Runnable 실...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.