mutithreaddemoview.cpp

来自「VC.net 的一些有用的技巧」· C++ 代码 · 共 152 行

CPP
152
字号
// MutiThreadDemoView.cpp : CMutiThreadDemoView 类的实现
//

#include "stdafx.h"
#include "MutiThreadDemo.h"

#include "MutiThreadDemoDoc.h"
#include "MutiThreadDemoView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

//int ThreadFlag;
CWinThread* pThread;
CEvent ThreadBegin;
CEvent ThreadEnd;


// CMutiThreadDemoView

IMPLEMENT_DYNCREATE(CMutiThreadDemoView, CView)

BEGIN_MESSAGE_MAP(CMutiThreadDemoView, CView)
	ON_COMMAND(ID_BeginThread, OnBeginthread)
	ON_COMMAND(ID_SuspendThread, OnSuspendthread)
	ON_COMMAND(ID_ResumeThread, OnResumethread)
	ON_COMMAND(ID_EndThread, OnEndthread)
	ON_MESSAGE(WM_THREADENDED, OnThreadEnded)
	ON_WM_CREATE()
END_MESSAGE_MAP()

// CMutiThreadDemoView 构造/销毁

CMutiThreadDemoView::CMutiThreadDemoView()
{
	// TODO: 在此处添加构造代码

}

CMutiThreadDemoView::~CMutiThreadDemoView()
{
}

BOOL CMutiThreadDemoView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
	// 样式

	return CView::PreCreateWindow(cs);
}

// CMutiThreadDemoView 绘制

void CMutiThreadDemoView::OnDraw(CDC* /*pDC*/)
{
	CMutiThreadDemoDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	// TODO: 在此处为本机数据添加绘制代码
}


// CMutiThreadDemoView 诊断

#ifdef _DEBUG
void CMutiThreadDemoView::AssertValid() const
{
	CView::AssertValid();
}

void CMutiThreadDemoView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CMutiThreadDemoDoc* CMutiThreadDemoView::GetDocument() const // 非调试版本是内联的
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMutiThreadDemoDoc)));
	return (CMutiThreadDemoDoc*)m_pDocument;
}
#endif //_DEBUG

UINT ThreadProc(LPVOID param)
{
	::WaitForSingleObject(ThreadBegin.m_hObject, INFINITE);
	AfxMessageBox("Beging a Thread",  MB_OK);
	/*while(ThreadFlag==1)
	{
		Beep(3000,1000);
	}
	::PostMessage((HWND)param, WM_THREADENDED, 0, 0);*/
	while(1)
	{
		if (::WaitForSingleObject(ThreadEnd.m_hObject, 0) == WAIT_OBJECT_0)
		break;
		Beep(3000,1000);
	}
	AfxMessageBox("End a Thread",  MB_OK);
	return 0;
}

// CMutiThreadDemoView 消息处理程序

void CMutiThreadDemoView::OnBeginthread()
{
	// TODO: 在此添加命令处理程序代码
    /*ThreadFlag = 1;
	HWND hWnd = GetSafeHwnd();
    pThread = AfxBeginThread(ThreadProc, hWnd, THREAD_PRIORITY_NORMAL);*/
	ThreadBegin.SetEvent();
}

void CMutiThreadDemoView::OnSuspendthread()
{
	// TODO: 在此添加命令处理程序代码
	AfxMessageBox("Suspend a Thread",  MB_OK);
	pThread->SuspendThread();	
}

void CMutiThreadDemoView::OnResumethread()
{
	// TODO: 在此添加命令处理程序代码
	AfxMessageBox("Resume a Thread",  MB_OK);
	pThread->ResumeThread();
}

void CMutiThreadDemoView::OnEndthread()
{
	// TODO: 在此添加命令处理程序代码
	/*AfxMessageBox("End a Thread",  MB_OK);
	ThreadFlag = 0;*/
	ThreadEnd.SetEvent();
}

long CMutiThreadDemoView::OnThreadEnded(WPARAM wParam, LPARAM lParam)
{
	AfxMessageBox("Thread Ended.", MB_OK);
	return 0;
}

int CMutiThreadDemoView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;

	// TODO:  在此添加您专用的创建代码
	HWND hWnd = GetSafeHwnd();
    pThread = AfxBeginThread(ThreadProc, hWnd, THREAD_PRIORITY_NORMAL);
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?