📄 wandr.cpp
字号:
// WAndR.cpp : implementation file
//
#include "stdafx.h"
#include "ReaderAndWriter.h"
#include "WAndR.h"
#include "afxmt.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CString str1,str2;
CString strR[20];
CString strW[20];
int ReadingNum=0;//正在读的读者数量
int WaitReader=0;//在等待的读者数
int WritingNum=0;//正在写的写者数量
int WaitWriter=0;//在等待的写者数
int RNumber=-1;//读者编号
int WNumber=-1;//写者编号
/////////////////////////////////////////////////////////////////////////////
// CWAndR dialog
UINT TReader(LPVOID pParama){
RNumber++;
int num;
num=RNumber;
num=num%20;
int n=rand()%15+rand()%7;//读的时间
strR[num].Format("Reader: %d Process: %d",num,n);
Sleep(500);
//wsprintf(strR[RNumber],"Reader:%d Process:%d",RNumber,n);
while(n!=0){
n--;
strR[num].Format("Reader: %d Process: %d",num,n);
Sleep(500);
}
//if(n==0)
//str[RNumber]=//////////////////////;
if(n==0){
strR[num].Format("%d",n);
}
ReadingNum--;
if(ReadingNum<=0){
ReadingNum=0;
}
return 0;
}
UINT TWriter(LPVOID pParama){
WNumber++;
int num;
num=WNumber;
num=num%20;
int n=rand()%15+rand()%5;//写的时间
strW[num].Format("Writer: %d Process: %d",num,n);
Sleep(500);
//wsprintf(strW[WNumber],"Reader:%d Process:%d",WNumber,n);
while(n!=0){
n--;
strW[num].Format("Writer: %d Process: %d",num,n);
Sleep(500);
}
if(n==0){
strW[num].Format("%d",n);
}
WritingNum--;
if(WritingNum<=0){
WritingNum=0;
}
return 0;
}
UINT TCPU(LPVOID pParama){
if(WaitReader>0&&WritingNum==0&&WaitWriter==0){
WaitReader--;
ReadingNum++;
AfxBeginThread(TReader,(LPVOID)ReadingNum);
}
else if(WaitWriter>0&&ReadingNum==0&&WritingNum==0){
WaitWriter--;
WritingNum++;
AfxBeginThread(TWriter,(LPVOID)WritingNum);
}
str1="";
str2="";
for(int i=0;i<20;i++){
if(strR[i]!="0")
str1=str1+strR[i]+'\r'+'\n';
if(strW[i]!="0")
str2=str2+strW[i]+'\r'+'\n';
}
return 0;
}
CWAndR::CWAndR(CWnd* pParent /*=NULL*/)
: CDialog(CWAndR::IDD, pParent)
{
//{{AFX_DATA_INIT(CWAndR)
m_strReaders = _T("");
m_strWriters = _T("");
m_WaitingW = 0;
m_WaitingR = 0;
//}}AFX_DATA_INIT
//SetTimer(1,50,NULL);
ReadingNum=0;//正在读的读者数量
WaitReader=0;//在等待的读者数
WritingNum=0;//正在写的写者数量
WaitWriter=0;//在等待的写者数
RNumber=0;//读者编号
WNumber=0;//写者编号
}
void CWAndR::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CWAndR)
DDX_Text(pDX, IDC_EDIT_READERS, m_strReaders);
DDX_Text(pDX, IDC_EDIT_WRITERS, m_strWriters);
DDX_Text(pDX, IDC_EDIT_WAITINGW, m_WaitingW);
DDX_Text(pDX, IDC_EDIT_WAiTINGR, m_WaitingR);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CWAndR, CDialog)
//{{AFX_MSG_MAP(CWAndR)
ON_BN_CLICKED(IDC_BUTTON_ADDREADER, OnButtonAddreader)
ON_BN_CLICKED(IDC_BUTTON_ADDWRITER, OnButtonAddwriter)
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CWAndR message handlers
void CWAndR::OnButtonAddreader()
{
// TODO: Add your control notification handler code here
Sleep(100);
SetTimer(1,200,NULL);
if(WaitReader>=10){
MessageBox("not allow enter now!");
return;
}
WaitReader++;
if(WritingNum==0&&WaitWriter==0){
WaitReader--;
ReadingNum++;
AfxBeginThread(TReader,"R");
}
m_WaitingR=WaitReader;
UpdateData(FALSE);
}
void CWAndR::OnButtonAddwriter()
{
// TODO: Add your control notification handler code here
Sleep(100);
SetTimer(1,200,NULL);
if(WaitWriter>=10){
MessageBox("not allow enter now!");
return;
}
WaitWriter++;
if(ReadingNum==0&&WritingNum==0){
WaitWriter--;
WritingNum++;
AfxBeginThread(TWriter,"W");
}
m_WaitingW=WaitWriter;
UpdateData(FALSE);
}
void CWAndR::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
AfxBeginThread(TCPU,"CPU");
m_WaitingR=WaitReader;
m_WaitingW=WaitWriter;
m_strWriters=str2;
m_strReaders=str1;
UpdateData(FALSE);
CDialog::OnTimer(nIDEvent);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -