| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 641 人关注过本帖
标题:请教高手一个多线程编程的问题
取消只看楼主 加入收藏
yangjinze
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-10-2
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:1 
请教高手一个多线程编程的问题
#include<windows.h>
#include<iostream.h>

DWORD WINAPI Fun1Proc(LPVOID lpParameter);
DWORD WINAPI Fun2Proc(LPVOID lpParameter);
int i=0;
int ticket=100;
void main()
{
HANDLE hThread1;
HANDLE hThread2;
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
while(i++<10000)
{
cout<<"main is running"<<endl;
}
}

DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
    while(i++<10000)
    {
    while(1)
    {
    if(ticket>0)
        cout<<"thread1 sell ticket: "<<ticket--<<endl;
    else
        break;
    }}
    return 0;
}

DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
    while(1)
    {
if(ticket>0)
        cout<<"thread2 sell ticket: "<<ticket--<<endl;
else
break;
    }
return 0;
}这个程序中,不采用Sleep()函数而采用while循环来使主函数不会那么早结束,但为什么主函数中改成//cout<<"main is running"<<endl;,注释起来,则线程1,2都不会执行了?
若不注释,将线程1中去掉任何一个循环,为什么也会导致线程1,2不能执行?
搜索更多相关主题的帖子: ticket 编程 running include 多线程 
2012-02-09 17:40
yangjinze
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-10-2
收藏
得分:0 
回复 2楼 hahayezhe
但是你把主函数中while循环改为while(i++<10000)
{
//cout<<"main is running"<<endl;
}
就不可以了呀?
还有为什么while内要加sleep(),
我的意思是while(i++<10000){};这个函数应该足够主函数时间片结束而转到执行子线程;

因为下面这个函数是可以的哦
#include<windows.h>
#include<iostream.h>

DWORD WINAPI Fun1Proc(LPVOID lpParameter);
int i=0;
void main()
{
 HANDLE hThread1;
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
CloseHandle(hThread1);
while(i++<10000)
{
cout<<"main is running"<<endl;
}
}

DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
    while(i++<10000)
   {
            cout<<"Thread is running "<<endl;
    }
        return 0;
}

2012-02-09 21:02
快速回复:请教高手一个多线程编程的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.010925 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved