c++ mfc-孙鑫视频第15章,多线程的创建,用互斥机制模拟火车票售票,我的问题,望大神指点

问题描述

孙鑫视频第15章,多线程的创建,用互斥机制模拟火车票售票,我的问题,望大神指点

问题:当我设的总票数超过298时(比如500,1000),我的票都是从第298张开始卖的,正常的应该是总票数是多少张,就是从多少张开始卖的吧,当总票数小于298时,就是正常卖票,下面是我的代码,和运行结果的图片(当票数为500时),我的编译环境是vs 2008请大神指点
#include
#include
using namespace std;
DWORD WINAPI ThreadFun1(
In LPVOID lpParameter
);
DWORD WINAPI ThreadFun2(
In LPVOID lpParameter
);
static UINT tickets=500;
HANDLE hMutex;

void main()
{
HANDLE hThread1;
HANDLE hThread2;
hThread1=CreateThread(NULL,0,ThreadFun1,NULL, 0,NULL);
hThread2=CreateThread(NULL,0,ThreadFun2,NULL, 0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
/*while(index++<1000)
cout<<"Main Thread is runningn";*/
hMutex=CreateMutex(NULL,FALSE,NULL);
Sleep(4000);
//Sleep(10);
}
DWORD WINAPI ThreadFun1(
In LPVOID lpParameter
)
{
/*while(index++<1000)
cout<<"Thread1 is runningn";*/

while(TRUE)
{
    WaitForSingleObject(hMutex,INFINITE);
    if(tickets>0)
    {
        cout<<"Thread1:"<<tickets--<<'n';
        /*puts("Thread1:");
        printf("%d",tickets);
        tickets--;*/
    }
    else
        break;
    ReleaseMutex(hMutex);
}

return 0;

}
DWORD WINAPI ThreadFun2(
In LPVOID lpParameter
)
{
/*while(index++<1000)
cout<<"Thread1 is runningn";*/

while(TRUE)
{
    WaitForSingleObject(hMutex,INFINITE);
    if(tickets>0)
        cout<<"Thread2:"<<tickets--<<'n';
    /*{
    puts("Thread2:");
    printf("%d",tickets);
    tickets--;
    }*/
    else
        break;
    ReleaseMutex(hMutex);
}

return 0;

}
控制台运行结果最顶端部分:

控制台运行最下面部分:

时间: 2024-10-24 20:28:02

c++ mfc-孙鑫视频第15章,多线程的创建,用互斥机制模拟火车票售票,我的问题,望大神指点的相关文章

各位能不能提供一个MFC框架的C++计费系统,要是完整的实验报告和可直接运行的代码,希望大神帮帮忙吧

问题描述 各位能不能提供一个MFC框架的C++计费系统,要是完整的实验报告和可直接运行的代码,希望大神帮帮忙吧 高手有赏追加30金币,说到做到,为了应付学校的生产实习来着,还请各位理解............................................ 解决方案 那你google下吧,只是一个现成的报告,自己找找.我要睡觉了,懒得帮你了. 解决方案二: 一般代写论文是300~500每篇,折合成"金币"大约是6000~10000,而且因为"金币"没

mfc ontimer用法,大神指点,,,,,,,,,,,,,

问题描述 mfc ontimer用法,大神指点,,,,,,,,,,,,, 有一个随时间不断运动的质点,,沿着一定宽度的轨道中心线左右不断向前运动,有时候会超出轨道,然后再运动回到轨道内,,我想统计整个过程中超出轨道的次数,,我们用质点距轨道中心线的距离和轨道半宽度判断,,,当质点从轨道内侧运动到轨道外侧,就只加一次,,怎么弄? 解决方案 http://blog.csdn.net/jerrytong/article/details/5771136 解决方案二: 定时器抽样,定时器的ontimer响

mfc-VS2013下MFC单文件工程不知咋的rc被清空了?求原因,最好有解决方案。谢谢大神!

问题描述 VS2013下MFC单文件工程不知咋的rc被清空了?求原因,最好有解决方案.谢谢大神! VS2013下MFC单文件工程不知咋的rc被清空了?求原因,最好有解决方案.谢谢大神! 解决方案 有可能是文件系统本身的破坏,比如计算机没有正常关机,或者被病毒或者恶意程序破坏.也可能是你的误操作,比如删除了什么,或者错误地执行了命令,比如撤销等等. 解决方案二: 如果是学生习作,并且代码不多,有两个办法,一个是再新建一个程序,把你的代码都贴过去,另一个办法是新建一个程序,把它的rc添加到你这个项目

图转换为视频-C# 如何中ffmpeg将指定文件夹中的图片转换为视频(求大神指点)

问题描述 C# 如何中ffmpeg将指定文件夹中的图片转换为视频(求大神指点) C# 如何中ffmpeg将指定文件夹中的图片转换为视频 如题,求命令格式,和详细的命令.

MFC下socket的收到的数据是如何区别显示在不同的窗口中的呢,求大神们指导!

问题描述 MFC下socket的收到的数据是如何区别显示在不同的窗口中的呢,求大神们指导! MFC下socket的收到的数据是如何区别显示在不同的窗口中的呢,本人是MFC,小菜鸟!求大神们指导! 解决方案 收到数据了,自己按格式得到不同字段数据,然后就是操作窗口各个控件,把数据显示上去.

c++ cli-寻求大神指点,如何将MFC对话框作为.net 中 winForm的父窗体

问题描述 寻求大神指点,如何将MFC对话框作为.net 中 winForm的父窗体 问题是这样的: 在建立的MFC对话框工程中,使用.NET与MFC互操作,在一个MFC的对话框CMFC_C_CLIDemoDlg 中显示一个.net的form窗体frm,由于需要显示成非模态对话框样式的Form,所以使用了frm->Show();的方法. 但是这样创建的窗体frm在失去焦点后,窗体就消失了(不显示在对话框的上层),经过测试发现,是因为在frm->Show()显示窗体时,没有指定对话框为它的父窗体.

请教red5视频存储和播放问题,望大神指点

问题描述 小弟最近在研究red5的视频播放,因为一些特殊业务,视频文件保存在另一台存储服务器上,现在要播放存储服务器上的视频,不知该怎么搞.因为貌似red5只支持本地视频播放,这块需要做扩展,但一直没搞出来.还望高人指点,小弟多谢了!!! 解决方案

根据视频集成单聊界面,头像和发送的消息无法显示,接受的消息也显示不出来,请大神指点

问题描述 根据视频集成UI的单聊界面,在界面聊天的头像还有发送的消息无法显示,接受的消息也无法显示,但是在客服界面却正常显示,请问这是怎么回事? 解决方案 消息的cell是EMChatViewCell控制的,参考demo中chatviewcontroller的cell赋值的地方,是否EMChatViewCell的代码没有走,找出原因.解决方案二:楼主可以吧集成的dome发给我看看么,我集成出现问题,一直没解决    在线等   谢谢  QQ1019004775

多线程-VC++孙鑫第十五课聊天室程序,如何有UDP改成TCP通信

问题描述 VC++孙鑫第十五课聊天室程序,如何有UDP改成TCP通信 看了孙鑫的第十五课:<多线程和聊天室程序的创建>,对其中的聊天室UDP程序中不断接收数据部分比较感兴趣,想把它改成TCP的版本,但是出现了不少问题不知道该怎么解决. 改动部分如下: 1.在InitSocket()中添加了listen和accept函数 2.由于TCP中连上之后发送数据需要使用accept获得的套接字,所以在OnInitDialog()中定义pRecvParam->sock=m_client; pRecv