网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
11月27日漏签0天
安徽农业大学吧 关注:183,722贴子:7,345,375
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 11回复贴,共1页
<<返回安徽农业大学吧
>0< 加载中...

求C++高手进。

  • 只看楼主
  • 收藏

  • 回复
  • 麦子不肥
  • 水军主力
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
求版聊。


  • 文刀三郎01
  • 举吧闻名
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你说吧


2025-11-27 12:51:43
广告
不感兴趣
开通SVIP免广告
  • 麦子不肥
  • 水军主力
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一小时前我已经搞定了。。。。。


  • 麦子不肥
  • 水军主力
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
笔记本换屏你那什么价?


  • 至尊—枪神
  • 好贴必回
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
和C++
有一毛钱的关系?


  • 文刀三郎01
  • 举吧闻名
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我不知道。。。不同型号也不一样啊。


  • 小宇咒要学习
  • 呵呵一笑
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
上学期末C++真心一点都不懂 最后一天刷夜到三点 第二天考了80多还帮别人开心地作弊 LZ有什么要问的。


  • bboymao
  • 深藏功名
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
小宇咒果然是好学生~


2025-11-27 12:45:43
广告
不感兴趣
开通SVIP免广告
  • 小宇咒要学习
  • 呵呵一笑
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
…………
屁啊~不解释了。。


  • 麦子不肥
  • 水军主力
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include "windows.h"
#include "iostream.h"
#include "math.h"
#define random (rand()*10000)/RAND_MAX //定义一个随机函数来生产产品,并且使两个顾产品间的时间少于10秒 int long waiting(0); //正在等待的产品的数目
int buffer; //空位的总数目
char empty; //缓冲区空
char full; //缓冲区满
int count(0); //产品的号码数
int finish(0); //生产完毕的产品数目
DWORD a;
void proceduce()
{
Sleep (10000);
cout<<"缓冲区已空 !"<<endl; //生产者生产产品函数,用时10秒
}
void getconsu***eep (10001); //产品被生产的函数,为了合理区分生产产品
cout<<"第"<<finish<<"个产品被消费,取出 "<<endl;
}
HANDLE Mutex=CreateMutex(NULL, FALSE, "Mutex"); //用来实现进程的互斥
HANDLE proceducer=CreateSemaphore(NULL, 1,1, "proceducer");//定义信号量来进行线程间的同步
HANDLE consumer=CreateSemaphore(NULL,0,3,"consum");
DWORD WINAPI consum(LPVOID pParm2) //消费的线程
{
WaitForSingleObject(Mutex ,INFINITE); //p(mutex)来进行互斥操作
count++; //生产的是第几个产品
cout<<"第 "<<count<<" 个产品生产了 "<<endl;
if (waiting<buffer) //如果缓冲池还有空位
{
if (waiting!=0)
{
cout<<"此时有"<<waiting+1 <<" 个产品等待消费"<<endl;
}
else
cout<<"没有产品在等待"<<endl; //输出有多少人在等待
waiting++;
cout<<"还有"<<buffer-waiting<<"个空位"<<endl;
cout<<"有空区,产品已经进入"<<endl;
ReleaseSemaphore(consum,1,NULL);//v(consumer)
ResumeThread(consum);//唤醒生产者进程
ReleaseMutex(Mutex);//释放互斥量,以便其他线程使用
WaitForSingleObject(proceducer,INFINITE);//等待生产
getconsum(); //消费并取走
}
else
{
cout<<"缓冲区已满,第"<<count<<"个产品暂停生产"<<endl; //没有空位,生产者不再生产
ReleaseMutex(Mutex);
}
return 0;
}
DWORD WINAPI proceducers(LPVOID pParm1) //生产者的线程
{
while(true) //一直执行
{
WaitForSingleObject(consum,INFINITE);//p(customers),等待产品
WaitForSingleObject(Mutex,INFINITE); //等待互斥量
waiting--; //等待的产品数减一
ReleaseSemaphore(proceducer,1,NULL); //释放信号量
ResumeThread(proceducer); //唤醒消费进程
ReleaseMutex(Mutex); //v(mutex);
proceduce(); //生产
finish++; //消费的产品数加1
}
return 0;
}
int main(int argc, char* argv[])
{
cout<<"请输入缓冲区空位的总数目:";
cin>>buffer;
cout<<"缓冲区共有"<<buffer<<"个空位"<<endl; //设置缓冲区空位数目
cout<<"缓冲区空生产产品吗?Y/N"<<endl; //缓冲区是否空
cin>>empty;
while (empty!='y')
{
cout<<endl<<"********对不起,缓冲区满!********"<<endl;
cout<<"缓冲区已空,生产产品?Y/N"<<endl;
cin>>empty;
}
HANDLE hThread1;
HANDLE hThread2;
hThread2=::CreateThread (NULL,0,proceducers,NULL,0,NULL); //产生一个生产者进程
while(full!='y')
{
Sleep(random); //产品随机进入
hThread1=::CreateThread(NULL,0,consum,NULL,a,NULL);
cout<<endl<<"********缓冲区已空,请继续生产********"<<endl;
if (finish>=10&&waiting==0) //如果完成数超过10并且没有人等待
{
cout<<"已经为"<<finish<<"个产品了,要停止生产吗?"<<endl; //提示是否关门
cin>>full;
return full;
}
else ;
}
if (full=='y')
{
cout<<"********对不起,缓冲区已满********"<<endl;
return 0;
}
}
是某学长写的,在网上找到的,写的真心好。
发出来大家看看吧,有兴趣提升的可以研究研究。
找到这个程序最关键的点,列出精华代码,当buffer=1时,程序是怎样运行的。


  • 麦子不肥
  • 水军主力
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
好吧,我明白了。3Q~


  • 麦子不肥
  • 水军主力
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
已经解决了,只是随口问下文刀的。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 11回复贴,共1页
<<返回安徽农业大学吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示