找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 6383|回复: 4

【多线程】VC6使用_beginthread开启多线程的方法

[复制链接]

1111

主题

1651

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
244
威望
743 点
宅币
24239 个
贡献
46222 次
宅之契约
0 份
在线时间
2297 小时
注册时间
2014-1-26
发表于 2014-3-11 04:06:48 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
_beginthread是C语言库提供的一个函数,作用是开启一个新的线程。开启以后,线程处理程序就会和你的当前线程同步运行。用图来表示就是这样:
MT.GIF
大家可以看出,经过这样的处理以后,你的程序变成了“多线程”程序了。可以同时跑两个程序。怎么样?屌不屌
DOS不支持多线程(虽然我有各种方法让它支持,但是默认的情况下DOS是不支持多线程的。)我这里主要讲支持多线程的操作系统怎么开启多线程。
如何开启多线程呢?首先你需要包含它的头文件。

#include<process.h>

然后你需要设置一下VC6的链接。
在VC6的左侧文件点文件视图(FileView)选项卡。
FileView.PNG
在工程文件点右键,出来一个菜单,点“设置”
SARSET.PNG
然后在弹出来的窗口中找到“C/C++”并在下面的“分类:”下拉菜单中找到“Code Generation
ProjSet.PNG
因为当前设置的是Win32 Debug(调试模式),你需要在右边的Use run-time library:(使用的运行库)中选择对应的调试版本的多线程运行库。
CGENDBG.PNG
然后也别忘了Win32 Release(发布程序),你需要在右边的Use run-time library:(使用的运行库)中选择对应的发布版本的多线程运行库。
CGENDRLS.PNG
然后点确定,再编译就发现可以运行啦!
大家可以拿下面的代码来试着了解一下什么是多线程。
  1. #include<stdio.h>
  2. #include<process.h>

  3. void Print1()//打印无数个1
  4. {
  5. PutAgain:
  6.     putchar('1');
  7.     goto PutAgain;
  8. }

  9. void Print2()//打印无数个2
  10. {
  11. PutAgain:
  12.     putchar('2');
  13.     goto PutAgain;
  14. }

  15. void main()
  16. {
  17.     _beginthread(Print1,0,NULL);
  18.     Print2();
  19. }
复制代码
这段代码运行的效果,就是你会看到一个控制台窗口有时候打印很多1,有时候打印很多2.为什么是这样的呢?因为你的两个程序一个是打印无数个1,一个是打印无数个2,那么当它们同时运行的时候,它们就会抢着要往控制台窗口输出自己要输出的字符。于是就出现了下面的效果:
MULTITHREAD.PNG
大家回帖之后就可以下载我的这个多线程实例编译后的EXE了。
游客,如果您要查看本帖隐藏内容请回复
我相信一定会有人问我,Multithread与Multithread DLL有什么区别。
Multithread(没有DLL)这个是把C语言运行库和你的程序链接合并到一起了。而Multithread DLL则把C语言运行库单独作为DLL和你的程序分离开来。
如果你只是编写一个简单的、单一的程序,你最好设置成Multithread(没有DLL),让你的程序和C语言运行库合并成一个单一的EXE,这样当你发布你的程序的时候就方便了。
而如果你要编写一个复杂的、庞大的程序,有多个EXE要生成,而且它们都用到了C语言运行库,这个时候就适合选择Multithread DLL,把C语言运行库作为独立的DLL和你的程序放到一起。这样,当你的程序们运行的时候,它们就会共同享用一个C语言运行库(而不是各用各的)。这样你的这些程序们的总体积就会减小,一起运行的时候占用的内存也减小了。但是因为每个程序在运行的时候都要载入一次DLL,导致程序刚开始运行可能会稍微慢一点。
回复

使用道具 举报

4

主题

24

回帖

286

积分

用户组: 中·技术宅

UID
32
精华
0
威望
6 点
宅币
245 个
贡献
1 次
宅之契约
0 份
在线时间
45 小时
注册时间
2014-2-7
发表于 2014-3-11 13:36:38 | 显示全部楼层
系统自动沙发
回复 赞! 靠!

使用道具 举报

0

主题

3

回帖

29

积分

用户组: 初·技术宅

UID
6501
精华
0
威望
6 点
宅币
14 个
贡献
0 次
宅之契约
0 份
在线时间
1 小时
注册时间
2020-12-16
发表于 2020-12-16 23:18:47 | 显示全部楼层
谢谢指路
回复

使用道具 举报

9

主题

177

回帖

1万

积分

用户组: 真·技术宅

UID
4293
精华
6
威望
441 点
宅币
8675 个
贡献
850 次
宅之契约
0 份
在线时间
338 小时
注册时间
2018-9-19
发表于 2020-12-21 09:50:55 | 显示全部楼层
VC6的话,用不着静态啊,VC6编译出来是依赖msvcrt.dll,系统都自带这个,而且连部分WinAPI的dll都依赖它,所以单个exe也没有用静态的必要了
回复 赞! 靠!

使用道具 举报

0

主题

9

回帖

13

积分

用户组: 初·技术宅

UID
5120
精华
0
威望
2 点
宅币
0 个
贡献
0 次
宅之契约
0 份
在线时间
1 小时
注册时间
2019-7-9
发表于 2023-4-20 00:02:15 | 显示全部楼层
先做个记号
回复 赞! 靠!

使用道具 举报

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-4-23 20:41 , Processed in 0.051424 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表