⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcdlg.cpp

📁 操作系统里的生产者与消费者的问题
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    pEmpty->SetWindowText(str3);
//输出full
	CEdit *pFull=(CEdit*)(pro.pEdit6);
 CString str5;
    str5.Format("%d", confull);
 pFull->SetWindowText(str5);
   Sleep(1500);
ReleaseMutex(g_hMutex); 
ReleaseSemaphore(g_hEmptySemaphore,1,NULL); 
  }
	//ReleaseSemaphore(g_hFullSemaphore,1,NULL); 
	
//return(0);
}
UINT WriteE(LPVOID pParam)
{
	
	CPCDlg dlg;
	CEdit *pEdit=(CEdit*)(pro.pEdit1);
	pEdit->SetWindowText("");
	//WaitForSingleObject(semaphoreWrite.m_hObject,INFINITE);
  while(1)
  {
  WaitForSingleObject(g_hFullSemaphore,INFINITE); 
  WaitForSingleObject(g_hMutex,INFINITE); 
   g_Array[in]='E';
 
  //输出in
   in++;
   in=in%10;
 CEdit *pSin=(CEdit*)(pro.pEdit2);
   CString str2;
   str2.Format("%d",in);
    pSin->SetWindowText(str2);
    proempty--;
	confull++;
	if(confull>10)
		confull=10;
	 //输出缓冲区的数据
  pEdit->SetWindowText( g_Array);
   //输出producer
   CEdit *pProducer=(CEdit*)(pro.pEdit4);
   CString str1;
   str1.Format("%c",'E');
    pProducer->SetWindowText(str1);
	// 输出number
	CEdit *pnumber=(CEdit*)(pro.pEdit5);
   pnumber->SetWindowText(str1);
   //输出empty
   CEdit *pEmpty=(CEdit*)(pro.pEdit3);
   CString str3;
   if(proempty<0)
	  proempty=0;
   str3.Format("%d",proempty);
    pEmpty->SetWindowText(str3);
//输出full
	CEdit *pFull=(CEdit*)(pro.pEdit6);
 CString str5;
    str5.Format("%d", confull);
 pFull->SetWindowText(str5);
   Sleep(1500);
ReleaseMutex(g_hMutex); 
ReleaseSemaphore(g_hEmptySemaphore,1,NULL); 
  }
	//ReleaseSemaphore(g_hFullSemaphore,1,NULL); 
	
//return(0);
}

void CPCDlg::OnProduce() 
{
	// TODO: Add your control notification handler code here

	pro.pEdit1=&m_ProNum;
    pro.pEdit2=&m_sin;
    pro.pEdit3=&m_empty;
	pro.pEdit4=&m_producer;
	pro.pEdit5=&m_number;
	pro.pEdit6=&m_full;
CWinThread *pWriteA=AfxBeginThread(WriteA,
		&pro,
		THREAD_PRIORITY_NORMAL,
		0,
	0);

	CWinThread *pWriteB=AfxBeginThread(WriteB,
		&pro,
		THREAD_PRIORITY_NORMAL,
		0,
	0);
		CWinThread *pWriteC=AfxBeginThread(WriteC,
		&pro,
		THREAD_PRIORITY_NORMAL,
		0,
	0);
		CWinThread *pWriteD=AfxBeginThread(WriteD,
		&pro,
		THREAD_PRIORITY_NORMAL,
		0,
	0);
		CWinThread *pWriteE=AfxBeginThread(WriteE,
		&pro,
		THREAD_PRIORITY_NORMAL,
		0,
	0);


}
//消费者



UINT ReadA(LPVOID pParam)
{
	CEdit *pConnum=(CEdit*)(consu.pEdit1);
   CEdit *pOut=(CEdit*)(consu.pEdit2);
   CEdit *pFull=(CEdit*)(consu.pEdit3);
  CEdit *pConsumernum=(CEdit*)(consu.pEdit4);
 CEdit *pConsumnum=(CEdit*)(consu.pEdit5);
   CEdit *pEmpty=(CEdit*)(consu.pEdit6);
  	CEdit *ppronum=(CEdit*)(consu.pEdit7);

	while(1)
	{ 
   WaitForSingleObject(g_hEmptySemaphore,INFINITE); 
   WaitForSingleObject(g_hMutex,INFINITE);
    //输出消费者名
    CString str1;
   str1.Format("%c", 'a');
   pConsumernum->SetWindowText(str1);
    //输出消费的数据
	CString str;
	str.Format("%c", g_Array[out]);
	 pConnum->SetWindowText(str);
	 ss.Format("%c",g_Array[out]);
     pConsumnum->SetWindowText(ss);
     g_Array[out]=' ';
	 //输出缓冲区的数据
	 
	 ppronum->SetWindowText(g_Array);
   	out++;
	out=out%10;
	 confull--;
	 if(confull<0)
		 confull=0;
     proempty++;
	if(proempty>10)
		proempty=0;
//输出out指针

    CString str2;
    str2.Format("%d", out);
	 pOut->SetWindowText(str2);
//输出sfull 
CString str3;
str3.Format("%d", confull);
 pFull->SetWindowText(str3);
//输出empty

   CString str5;
   str5.Format("%d",proempty);
    pEmpty->SetWindowText(str5);

    Sleep(1500); 
   ReleaseMutex(g_hMutex); 
  ReleaseSemaphore(g_hFullSemaphore,1,NULL); 
} 
}
UINT ReadB(LPVOID pParam)
{
	CEdit *pConnum=(CEdit*)(consu.pEdit1);
	CEdit *pOut=(CEdit*)(consu.pEdit2);
	CEdit *pFull=(CEdit*)(consu.pEdit3);
    CEdit *pConsumernum=(CEdit*)(consu.pEdit4);
	 CEdit *pConsumnum=(CEdit*)(consu.pEdit5);
	CEdit *pEmpty=(CEdit*)(consu.pEdit6);
	CEdit *ppronum=(CEdit*)(consu.pEdit7);
	while(1)
	{ 
   WaitForSingleObject(g_hEmptySemaphore,INFINITE); 
   WaitForSingleObject(g_hMutex,INFINITE);
  //输出消费者名
    CString str1;
   str1.Format("%c", 'b');
   pConsumernum->SetWindowText(str1);
    //输出消费的数据
	CString str;
	str.Format("%c", g_Array[out]);
   pConnum->SetWindowText(str);
    ss.Format("%c",g_Array[out]);
     pConsumnum->SetWindowText(ss);
     g_Array[out]=' ';
	 //输出缓冲区的数据
	 	
	 ppronum->SetWindowText(g_Array);
   	out++;
	out=out%10;
	 confull--;
	 if(confull<0)
		 confull=0;
     proempty++;
	if(proempty>10)
		proempty=0;
//输出out指针

    CString str2;
    str2.Format("%d", out);
	 pOut->SetWindowText(str2);
//输出sfull 
CString str3;
str3.Format("%d", confull);
 pFull->SetWindowText(str3);
//输出empty

   CString str5;
   str5.Format("%d",proempty);
    pEmpty->SetWindowText(str5);
   Sleep(1500); 
   ReleaseMutex(g_hMutex); 
  ReleaseSemaphore(g_hFullSemaphore,1,NULL); 
} 
}
UINT ReadC(LPVOID pParam)
{
	CEdit *pConnum=(CEdit*)(consu.pEdit1);
	CEdit *pOut=(CEdit*)(consu.pEdit2);
	CEdit *pFull=(CEdit*)(consu.pEdit3);
    CEdit *pConsumernum=(CEdit*)(consu.pEdit4);
	 CEdit *pConsumnum=(CEdit*)(consu.pEdit5);
	CEdit *pEmpty=(CEdit*)(consu.pEdit6);
	CEdit *ppronum=(CEdit*)(consu.pEdit7);
	while(1)
	{ 
   WaitForSingleObject(g_hEmptySemaphore,INFINITE); 
   WaitForSingleObject(g_hMutex,INFINITE);
  //输出消费者名
    CString str1;
   str1.Format("%c", 'c');
   pConsumernum->SetWindowText(str1);
    //输出消费的数据
	CString str;
	str.Format("%c", g_Array[out]);
   pConnum->SetWindowText(str);
    ss.Format("%c",g_Array[out]);
     pConsumnum->SetWindowText(ss);
     g_Array[out]=' ';
	 //输出缓冲区的数据
	 	
	 ppronum->SetWindowText(g_Array);
   	out++;
	out=out%10;
	 confull--;
	 if(confull<0)
		 confull=0;
     proempty++;
	if(proempty>10)
		proempty=0;
//输出out指针

    CString str2;
    str2.Format("%d", out);
	 pOut->SetWindowText(str2);
//输出sfull 
CString str3;
str3.Format("%d", confull);
 pFull->SetWindowText(str3);
//输出empty

   CString str5;
   str5.Format("%d",proempty);
    pEmpty->SetWindowText(str5);
   Sleep(1500); 
   ReleaseMutex(g_hMutex); 
  ReleaseSemaphore(g_hFullSemaphore,1,NULL); 
} 
}
UINT ReadD(LPVOID pParam)
{
	CEdit *pConnum=(CEdit*)(consu.pEdit1);
	CEdit *pOut=(CEdit*)(consu.pEdit2);
	CEdit *pFull=(CEdit*)(consu.pEdit3);
    CEdit *pConsumernum=(CEdit*)(consu.pEdit4);
	 CEdit *pConsumnum=(CEdit*)(consu.pEdit5);
	CEdit *pEmpty=(CEdit*)(consu.pEdit6);
	CEdit *ppronum=(CEdit*)(consu.pEdit7);
	while(1)
	{ 
   WaitForSingleObject(g_hEmptySemaphore,INFINITE); 
   WaitForSingleObject(g_hMutex,INFINITE);
  //输出消费者名
    CString str1;
   str1.Format("%c", 'd');
   pConsumernum->SetWindowText(str1);
    //输出消费的数据
	CString str;
	str.Format("%c", g_Array[out]);
   pConnum->SetWindowText(str);
    ss.Format("%c",g_Array[out]);
     pConsumnum->SetWindowText(ss);
     g_Array[out]=' ';
	 //输出缓冲区的数据
	 	
	 ppronum->SetWindowText(g_Array);
   	out++;
	out=out%10;
	 confull--;
	 if(confull<0)
		 confull=0;
     proempty++;
	if(proempty>10)
		proempty=0;
//输出out指针

    CString str2;
    str2.Format("%d", out);
	 pOut->SetWindowText(str2);
//输出sfull 
CString str3;
str3.Format("%d", confull);
 pFull->SetWindowText(str3);
//输出empty

   CString str5;
   str5.Format("%d",proempty);
    pEmpty->SetWindowText(str5);
   Sleep(1500); 
   ReleaseMutex(g_hMutex); 
  ReleaseSemaphore(g_hFullSemaphore,1,NULL); 
} 
}
UINT ReadE(LPVOID pParam)
{
	CEdit *pConnum=(CEdit*)(consu.pEdit1);
	CEdit *pOut=(CEdit*)(consu.pEdit2);
	CEdit *pFull=(CEdit*)(consu.pEdit3);
    CEdit *pConsumernum=(CEdit*)(consu.pEdit4);
	 CEdit *pConsumnum=(CEdit*)(consu.pEdit5);
	CEdit *pEmpty=(CEdit*)(consu.pEdit6);
	CEdit *ppronum=(CEdit*)(consu.pEdit7);
	while(1)
	{ 
   WaitForSingleObject(g_hEmptySemaphore,INFINITE); 
   WaitForSingleObject(g_hMutex,INFINITE);
  //输出消费者名
    CString str1;
   str1.Format("%c", 'e');
   pConsumernum->SetWindowText(str1);
    //输出消费的数据
	CString str;
	str.Format("%c", g_Array[out]);
   pConnum->SetWindowText(str);
    ss.Format("%c",g_Array[out]);
     pConsumnum->SetWindowText(ss);
     g_Array[out]=' ';
	 //输出缓冲区的数据
	 	
	 ppronum->SetWindowText(g_Array);
   	out++;
	out=out%10;
	 confull--;
	 if(confull<0)
		 confull=0;
     proempty++;
	if(proempty>10)
		proempty=0;
//输出out指针

    CString str2;
    str2.Format("%d", out);
	 pOut->SetWindowText(str2);
//输出sfull 
CString str3;
str3.Format("%d", confull);
 pFull->SetWindowText(str3);
//输出empty

   CString str5;
   str5.Format("%d",proempty);
    pEmpty->SetWindowText(str5);
   Sleep(1500); 
   ReleaseMutex(g_hMutex); 
  ReleaseSemaphore(g_hFullSemaphore,1,NULL); 
} 
}

void CPCDlg::OnConsume() 
{
	// TODO: Add your control notification handler code here
	consu.pEdit1=&m_ConNum;
	consu.pEdit2=&m_out;
	consu.pEdit3=&m_full;
	consu.pEdit4=&m_consumernum;
	consu.pEdit5=&m_consumnum;
	consu.pEdit6=&m_empty;
	consu.pEdit7=&m_ProNum;
	CWinThread *pReadA=AfxBeginThread(ReadA,
		&consu,
		THREAD_PRIORITY_NORMAL,
		0,
	0);

	CWinThread *pReadB=AfxBeginThread(ReadB,
		&consu,
		THREAD_PRIORITY_NORMAL,
		0,
	0);
		CWinThread *pReadC=AfxBeginThread(ReadC,
		&consu,
		THREAD_PRIORITY_NORMAL,
		0,
	0);
			CWinThread *pReadD=AfxBeginThread(ReadD,
		&consu,
		THREAD_PRIORITY_NORMAL,
		0,
	0);
				CWinThread *pReadE=AfxBeginThread(ReadE,
		&consu,
		THREAD_PRIORITY_NORMAL,
		0,
	0);
	
}

⌨️ 快捷键说明

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