【VC开源代码栏目提醒】:网学会员鉴于大家对VC开源代码十分关注,论文会员在此为大家搜集整理了“TheadTestView.cpp”一文,供大家参考学习
// TheadTestView.cpp : CTheadTestView 类的实现
//
#include "stdafx.h"
#include "TheadTest.h"
#include "MyThread.h"
#include "TheadTestDoc.h"
#include "TheadTestView.h"
#include "afxmt.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
//定义两个变量.
char MyString[]="This is work thread !" ;
CEvent eventObj ;
/////////////////////////////////////////////////
// CTheadTestView
IMPLEMENT_DYNCREATE(CTheadTestView, CView)
BEGIN_MESSAGE_MAP(CTheadTestView, CView)
ON_COMMAND(ID_EVENTTHREAD, OnEventthread)
ON_COMMAND(ID_UITHREAD, OnUithread)
ON_COMMAND(ID_WORKTHREAD, OnWorkthread)
ON_WM_RBUTTONDOWN()
END_MESSAGE_MAP()
// CTheadTestView 构造/销毁
CTheadTestView::CTheadTestView()
{
// TODO: 在此处添加构造代码
}
CTheadTestView::~CTheadTestView()
{
}
BOOL CTheadTestView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
// 样式
return CView::PreCreateWindow(cs);
}
// CTheadTestView 绘制
void CTheadTestView::OnDraw(CDC* /*pDC*/)
{
CTheadTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: 在此处为本机数据添加绘制代码
}
// CTheadTestView 诊断
#ifdef _DEBUG
void CTheadTestView::AssertValid() const
{
CView::AssertValid();
}
void CTheadTestView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CTheadTestDoc* CTheadTestView::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTheadTestDoc)));
return (CTheadTestDoc*)m_pDocument;
}
#endif //_DEBUG
// CTheadTestView 消息处理程序
//以下为事件线程。
UINT MyEventThread(LPVOID pParam)
{
HWND hWnd = (HWND) pParam;
::MessageBox(hWnd,"线程以经开始","Thread Message",
MB_ICONEXCLAMATION|MB_OK);
eventObj.Lock();
::MessageBox(hWnd,"线程进行之中","Thread Message",
MB_ICONEXCLAMATION|MB_OK);
return 0;
}
void CTheadTestView::OnEventthread()
{
// TODO:在此添加命令处理程序代码
HWND hWnd = GetSafeHwnd() ;
AfxBeginThread(MyEventThread,hWnd) ;
}
void CTheadTestView::OnUithread()
{
// TODO:在此添加命令处理
程序代码
AfxBeginThread(RUNTIME_CLASS(CMyThread));
}
//
工作线程代码。
UINT MyWorkThread(LPVOID pParam)
{
CWnd* pMainWnd=AfxGetMainWnd();
if (pParam==NULL)
{
::MessageBox(pMainWnd->m_hWnd,"参数传递出错。线程结束!","Thread error",MB_OK|MB_ICONERROR);
AfxEndThread(2);
}
char* pStr=(char*) pParam;
while(*pStr)
{
if(*pStr>='a' && *pStr<='z')
*pStr-=32; //将小写字母转换成大写字母。
pStr++; //指向下一个字符。
}
::MessageBox(pMainWnd->m_hWnd,(const char*) pParam,"Thread run",MB_OK);
return 0;
}
void CTheadTestView::OnWorkthread()
{
// TODO:在此添加命令处理程序代码
CDC* pDC=GetDC();
pDC->TextOut(20,20,"转换之前的字符串为:");
pDC->TextOut(40,60,MyString);
char* pString;
pString=(char*)MyString;
AfxBeginThread(MyWorkThread,(LPVOID)pString);
pDC->TextOut(20,100,"转换之后的字符串为:");
ReleaseDC (pDC);
}
void CTheadTestView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO:在此添加消息处理程序代码和/或调用默认值
eventObj.SetEvent() ;
CView::OnRButtonDown(nFlags, point);
}