| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 444 人关注过本帖
标题:多线程输出乱码,帮忙看看,谢谢咯!
只看楼主 加入收藏
gordonlj
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-12-10
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
多线程输出乱码,帮忙看看,谢谢咯!
最近在学习多线程,同样的代码,每次输出的方式和结果都不一样,不知道哪里出问题,麻烦大虾帮忙看看。
代码如下:
程序代码:
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;

DWORD WINAPI Func_thread1(LPVOID lpparameter);
DWORD WINAPI Func_thread2(LPVOID lpparameter);

HANDLE tar_event;
int tickets = 100;

void main()
{
    HANDLE tar_thread1;
    tar_thread1 = CreateThread(NULL,0,Func_thread1,NULL,0,NULL);
    CloseHandle(tar_thread1);

    HANDLE tar_thread2;
    tar_thread2 = CreateThread(NULL,0,Func_thread2,NULL,0,NULL);
    CloseHandle(tar_thread2);

    tar_event = CreateEvent(NULL, FALSE,FALSE,NULL);   //自动重置事件,初始无信号;
    SetEvent(tar_event);
    CloseHandle(tar_event);

    Sleep(800);
}


DWORD WINAPI Func_thread1(LPVOID lpparameter)
{
    while(TRUE)
    {   
        WaitForSingleObject(tar_event,INFINITE);
        if (tickets >0)
        {
            Sleep(1);
            cout<<"thread 1 sell ticket :"<<tickets--<< endl;
//            printf("thread 1 sell ticket :%d \n",tickets--);
            SetEvent(tar_event);
        }
        else
        {
            SetEvent(tar_event);
            break;
        }
//        SetEvent(tar_event);
    }
    return 0;
}


DWORD WINAPI Func_thread2(LPVOID lpparameter)
{
    while(TRUE)
    {
        WaitForSingleObject(tar_event,INFINITE);
        if (tickets >0)
        {
            Sleep(1);
            cout<<"thread 2 sell ticket :"<<tickets--<<endl;
//            printf("thread 2 sell ticket :%d \n",tickets--);
            SetEvent(tar_event);
        }
        else
        {
            SetEvent(tar_event);
            break;
//        SetEvent(tar_event);
    }
    return 0;
}

        }[local]1[/local][local]2[/local][local]3[/local]

输出结果每次都不一样。不知道是为什么。


1.JPG (34.67 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册


2.JPG (50.39 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册


3.JPG (50.68 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 多线程 
2013-12-10 19:31
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:20 

    tar_event = CreateEvent(NULL, FALSE,FALSE,NULL);   //自动重置事件,初始无信号;
提到创建线程之前。

否则,线程已经起来了你的Event 还没有创建成功泥
收到的鲜花
  • gordonlj2013-12-11 08:54 送鲜花  3朵   附言:我很赞同,谢谢你!

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-12-10 20:06
gordonlj
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-12-10
收藏
得分:0 
非常感谢你,新手上路。
2013-12-11 08:55
快速回复:多线程输出乱码,帮忙看看,谢谢咯!
数据加载中...
 
   



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

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