| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1728 人关注过本帖
标题:请问以下程序是2线程,还是3线程?
只看楼主 加入收藏
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1925
专家分:2992
注 册:2009-12-22
结帖率:89.13%
收藏
已结贴  问题点数:20 回复次数:6 
请问以下程序是2线程,还是3线程?
请问以下程序是2线程,还是3线程?代码还可以再简单点不?

程序代码:
//最简单的创建多线程实例   
#include <stdio.h>   
#include <windows.h>   
//子线程函数 A  
DWORD WINAPI ThreadFunA(LPVOID pM)  
{  
    printf("子线程A的线程ID号为:%d\n子线程A输出Hello World\n", GetCurrentThreadId());  
    return 0;  
} 
//子线程函数 B
DWORD WINAPI ThreadFunB(LPVOID pM)  
{  
    printf("子线程B的线程ID号为:%d\n子线程B输出Hello World\n", GetCurrentThreadId());  
    return 0;  
} 
//主函数,所谓主函数其实就是主线程执行的函数。   
int main()  
{  
    printf("最简单的创建多线程实例\n");  
  
    HANDLE handleA = CreateThread(NULL, 0, ThreadFunA, NULL, 0, NULL);  
    WaitForSingleObject(handleA, INFINITE);  
    HANDLE handleB = CreateThread(NULL, 0, ThreadFunB, NULL, 0, NULL);  
    WaitForSingleObject(handleB, INFINITE);  
    system("pause");  
}  
搜索更多相关主题的帖子: printf Hello 函数 线程 NULL 
2020-10-02 19:56
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10539
专家分:42927
注 册:2014-5-20
收藏
得分:20 
程序代码:
#include <stdio.h>
#include <windows.h>
//子线程函数 A
DWORD WINAPI ThreadFun(LPVOID pM)
{
    printf("子线程 %d 的线程ID号为:%d,输出 Hello World\n", (int)pM,GetCurrentThreadId());
    return 0;
}
//主函数,所谓主函数其实就是主线程执行的函数。
int main()
{
    printf("最简单的创建多线程实例\n");
    printf("主线程的线程ID号为:%d,输出 Hello World\n", GetCurrentThreadId());
    CreateThread(NULL, 0, ThreadFun, (LPVOID)1, 0, NULL);
    CreateThread(NULL, 0, ThreadFun, (LPVOID)2, 0, NULL);
    system("pause");
}
2020-10-02 20:48
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1925
专家分:2992
注 册:2009-12-22
收藏
得分:0 
我想问一下,它到底是2线程的,还是3线程的,为什么?

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2020-10-03 11:22
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10539
专家分:42927
注 册:2014-5-20
收藏
得分:0 
以下是引用yuma在2020-10-3 11:22:40的发言:

我想问一下,它到底是2线程的,还是3线程的,为什么?

一个主线程两个子线程
2020-10-03 11:44
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1925
专家分:2992
注 册:2009-12-22
收藏
得分:0 
以下是引用吹水佬在2020-10-2 20:48:14的发言:

#include <stdio.h>
#include <windows.h>
//子线程函数 A
DWORD WINAPI ThreadFun(LPVOID pM)
{
    printf("子线程 %d 的线程ID号为:%d,输出 Hello World\n", (int)pM,GetCurrentThreadId());
    return 0;
}
//主函数,所谓主函数其实就是主线程执行的函数。
int main()
{
    printf("最简单的创建多线程实例\n");
    printf("主线程的线程ID号为:%d,输出 Hello World\n", GetCurrentThreadId());
    CreateThread(NULL, 0, ThreadFun, (LPVOID)1, 0, NULL);
    CreateThread(NULL, 0, ThreadFun, (LPVOID)2, 0, NULL);
    system("pause");
}


图片附件: 游客没有浏览图片的权限,请 登录注册

线程1或线程2会输出2次,不知为什么?

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2020-10-05 08:27
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10539
专家分:42927
注 册:2014-5-20
收藏(1)
得分:0 
回复 5楼 yuma
多线程实际应用中,类似用printf输出到同一个设备,要考虑线程同步的问题。
用于线程间同步的对象一般有:事件对象、临界区对象、互斥量对象和信号灯对象等。
试试用事件对象:
程序代码:
#include <stdio.h>
#include <windows.h>
HANDLE hEvent;
//子线程函数
DWORD WINAPI ThreadFun(LPVOID pM)
{
    WaitForSingleObject(hEvent, INFINITE);
    printf("子线程 %d 的线程ID号为:%d,输出 Hello World\n", (int)pM,GetCurrentThreadId());
    SetEvent(hEvent);
    //Sleep(50);
    return 0;
}
//主函数,所谓主函数其实就是主线程执行的函数。
int main()
{
    hEvent = CreateEvent(NULL, FALSE, TRUE, NULL);
    printf("最简单的创建多线程实例\n");
    printf("主线程的线程ID号为:%d,输出 Hello World\n", GetCurrentThreadId());
    CreateThread(NULL, 0, ThreadFun, (LPVOID)1, 0, NULL);
    CreateThread(NULL, 0, ThreadFun, (LPVOID)2, 0, NULL);
    CloseHandle(hEvent);
    system("pause");
}
2020-10-05 15:57
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1925
专家分:2992
注 册:2009-12-22
收藏
得分:0 
回复 6楼 吹水佬
感谢,很好的多线程实例。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2020-10-05 17:04
快速回复:请问以下程序是2线程,还是3线程?
数据加载中...
 
   



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

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