【VC开源代码栏目提醒】:网学会员,鉴于大家对VC开源代码十分关注,论文会员在此为大家搜集整理了“Ex15_3View.cpp”一文,供大家参考学习!
// Ex15_3View.cpp : implementation of the CEx15_3View class
//
#include "stdafx.h"
#include "Ex15_3.h"
#include "Ex15_3Doc.h"
#include "Ex15_3View.h"
#include "afxmt.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
char cArray[10]; //共享资源
CCriticalSection criticalSection;// MFC临界区类对象
//临界区线程函数
UINT ThreadCriticalFunc1(LPVOID param)
{
// 进入临界区
criticalSection.Lock();
// 对共享资源进行写入操作
for (int i = 0; i < 10; i++)
{
cArray[i] = 'a';
Sleep(1);
}
// 离开临界区
criticalSection.Unlock();
return 0;
}
UINT ThreadCriticalFunc2(LPVOID param)
{
// 进入临界区
criticalSection.Lock();
// 对共享资源进行写入操作
for (int i = 0; i < 10; i++)
{
cArray[10 - i - 1] = 'b';
Sleep(1);
}
// 离开临界区
criticalSection.Unlock();
return 0;
}
// 事件内核对象
CEvent event;
UINT ThreadEventFunc1(LPVOID param)
{
// 对共享资源进行写入操作
for (int i = 0; i < 10; i++)
{
cArray[i] = 'a';
Sleep(1);
}
// 设置事件置位
event.SetEvent();
return 0;
}
UINT ThreadEventFunc2(LPVOID param)
{
// 等待事件
event.Lock();
// 对共享资源进行写入操作
for (int i = 0; i < 10; i++)
{
cArray[10 - i - 1] = 'b';
Sleep(1);
}
return 0;
}
//互斥
CMutex mutex(FALSE, NULL); //互斥类对象
UINT ThreadMutexFunc1(LPVOID param)
{
mutex.Lock();// 等待互斥对象通知
// 对共享资源进行写入操作
for (int i = 0; i < 10; i++)
{
cArray[i] = 'a';
Sleep(1);
}
mutex.Unlock();// 释放互斥对象
return 0;
}
UINT ThreadMutexFunc2(LPVOID param)
{
mutex.Lock();// 等待互斥对象通知
// 对共享资源进行写入操作
for (int i = 0; i < 10; i++)
{
cArray[10 - i - 1] = 'b';
Sleep(1);
}
mutex.Unlock();// 释放互斥对象
return 0;
}
//信号量
CSemaphore semaphore(2, 2);// 信号量类对象
UINT ThreadSemaphoreFunc1(LPVOID param)
{
semaphore.Lock();// 试图进入信号量关口
AfxMessageBox("线程一正在执行!");// 线程任务处理
semaphore.Unlock();// 释放信号量计数
return 0;
}
UINT ThreadSemaphoreFunc2(LPVOID param)
{
semaphore.Lock();// 试图进入信号量关口
AfxMessageBox("线程二正在执行!"); // 线程任务处理
semaphore.Unlock(); // 释放信号量计数
return 0;
}
UINT ThreadSemaphoreFunc3(LPVOID param)
{
semaphore.Lock();// 试图进入信号量关口
AfxMessageBox("线程三正在执行!"); // 线程任务处理
semaphore.Unlock(); // 释放信号量计数
return 0;
}
/////////////////////////////////////////////////////////////////////////////
// CEx15_3View
IMPLEMENT_DYNCREATE(CEx15_3View, CView)
BEGIN_MESSAGE_MAP(CEx15_3View, CView)
//{{AFX_MSG_MAP(CEx15_3View)
ON_COMMAND(ID_SYN_CRITICALSECTION, OnSynCriticalsection)
ON_COMMAND(ID_SYN_EVENT, OnSynEvent)
ON_COMMAND(ID_SYN_MUTEX, OnSynMutex)
ON_COMMAND(ID_SYN_SEMAPHORE, OnSynSemaphore)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEx15_3View construction/destruction
CEx15_3View::CEx15_3View()
{
// TODO: add construction code here
}
CEx15_3View::~CEx15_3View()
{
}
BOOL CEx15_3View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CEx15_3View drawing
void CEx15_3View::OnDraw(CDC* pDC)
{
CEx15_3Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CEx15_3View printing
BOOL CEx15_3View::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CEx15_3View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CEx15_3View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CEx15_3View diagnostics
#ifdef _DEBUG
void CEx15_3View::AssertValid() const
{
CView::AssertValid();
}
void CEx15_3View::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CEx15_3Doc* CEx15_3View::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CEx15_3Doc)));
return (CEx15_3Doc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CEx15_3View message handlers
void CEx15_3View::OnSynCriticalsection() //临界区
{
// TODO: Add your command handler code here
// 启动线程
AfxBeginThread(ThreadCriticalFunc1, NULL);
AfxBeginThread(ThreadCriticalFunc2, NULL);
// 等待计算完毕
Sleep(300);
// 报告计算结果
CString sResult = CString(cArray);
AfxMessageBox(sResult);
}
void CEx15_3View::OnSynEvent() //事件内核对象
{
// TODO: Add your command handler code here
// 启动线程
AfxBeginThread(ThreadEventFunc1, NULL);
AfxBeginThread(ThreadEventFunc2, NULL);
// 等待计算完毕
Sleep(300);
// 报告计算结果
CString sResult = CString(cArray);
AfxMessageBox(sResult);
}
void CEx15_3View::OnSynMutex() //互斥内核对象
{
// TODO: Add your command handler code here
// 启动线程
AfxBeginThread(ThreadMutexFunc1, NULL);
AfxBeginThread(ThreadMutexFunc2, NULL);
// 等待计算完毕
Sleep(300);
// 报告计算结果
CString sResult = CString(cArray);
AfxMessageBox(sResult);
}
void CEx15_3View::OnSynSemaphore() //信号量内核对象
{
// TODO: Add your command handler code here
// 启动线程
AfxBeginThread(ThreadSemaphoreFunc1, NULL);
AfxBeginThread(ThreadSemaphoreFunc2, NULL);
AfxBeginThread(ThreadSemaphoreFunc3, NULL);
}
上一篇:
Ex15_3Doc.cpp
下一篇:
多功能数据挖掘平台的CS架构扩展的研究与实现