注册 登录
编程论坛 VC++/MFC

关于VC++多线程

邵帅 发布于 2013-01-28 15:05, 501 次点击
刚接触多线程,我的代码如下
程序代码:

#include<windows.h>
#include<iostream.h>
DWORD WINAPI funproc1(LPVOID lppara);
DWORD WINAPI funproc2(LPVOID lppara);
int flag=0;
int tickets=1000;
void main()
{
    HANDLE htread1;
    HANDLE htread2;
    htread1=CreateThread(NULL,0,funproc1,NULL,0,NULL);
    htread2=CreateThread(NULL,0,funproc2,NULL,0,NULL);
    CloseHandle(htread1);
    CloseHandle(htread2);
    while(flag<=tickets)
    {
        Sleep(100);
        cout<<"main thread is running"<<flag<<endl;
    }
    cout<<"over"<<endl;
}
DWORD WINAPI funproc1(LPVOID lppara)
{
    int flag1=0;
    while(flag<=tickets)
    {
        flag1++;
        cout<<"thread1 is running:"<<flag1<<endl;
    }
    return 0;
}
DWORD WINAPI funproc2(LPVOID lppara)
{
    int flag2=0;
    while(1)
    {
        flag2++;
        cout<<"thread2 is running:"<<flag2<<endl;
    }
    return 0;
}

只有本站会员才能查看附件,请 登录

怎么会出现这种问题。

[ 本帖最后由 邵帅 于 2013-1-28 15:07 编辑 ]
7 回复
#2
yuccn2013-01-28 17:16
多线程访问公共资源,那就加个锁吧。一个线程正在修改,另一个线程正好在输出,就会出现这个情况

学习多线程,不可能不学习资源保护的:
1 事件
2 临界区
3 互斥量
4 信号量

等等
其中除了临界区,其他三个都是内核对象,

兄弟,加油
#3
yuccn2013-01-28 17:18
请教下,vb是不是没有多线程的?
#4
邵帅2013-01-31 21:49
回复 3楼 yuccn
严格的说没有多线程。
#5
lydevs2013-02-06 16:45
还没学!标记一下!
#6
zd15056753192013-02-08 13:17
买了本核心编程好家伙天书啊
#7
qq3725058552013-02-17 08:40
知道多线程,不知道加锁
#8
yplx4022013-04-08 18:27
,从外界采数据呢
1