0xAA55 发表于 2014-3-11 04:06:48

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

_beginthread是C语言库提供的一个函数,作用是开启一个新的线程。开启以后,线程处理程序就会和你的当前线程同步运行。用图来表示就是这样:

大家可以看出,经过这样的处理以后,你的程序变成了“多线程”程序了。可以同时跑两个程序。怎么样?屌不屌
DOS不支持多线程(虽然我有各种方法让它支持,但是默认的情况下DOS是不支持多线程的。)我这里主要讲支持多线程的操作系统怎么开启多线程。
如何开启多线程呢?首先你需要包含它的头文件。

#include<process.h>

然后你需要设置一下VC6的链接。
在VC6的左侧文件点文件视图(FileView)选项卡。

在工程文件点右键,出来一个菜单,点“设置”

然后在弹出来的窗口中找到“C/C++”并在下面的“分类:”下拉菜单中找到“Code Generation”

因为当前设置的是Win32 Debug(调试模式),你需要在右边的Use run-time library:(使用的运行库)中选择对应的调试版本的多线程运行库。

然后也别忘了Win32 Release(发布程序),你需要在右边的Use run-time library:(使用的运行库)中选择对应的发布版本的多线程运行库。

然后点确定,再编译就发现可以运行啦!
大家可以拿下面的代码来试着了解一下什么是多线程。#include<stdio.h>
#include<process.h>

void Print1()//打印无数个1
{
PutAgain:
    putchar('1');
    goto PutAgain;
}

void Print2()//打印无数个2
{
PutAgain:
    putchar('2');
    goto PutAgain;
}

void main()
{
    _beginthread(Print1,0,NULL);
    Print2();
}这段代码运行的效果,就是你会看到一个控制台窗口有时候打印很多1,有时候打印很多2.为什么是这样的呢?因为你的两个程序一个是打印无数个1,一个是打印无数个2,那么当它们同时运行的时候,它们就会抢着要往控制台窗口输出自己要输出的字符。于是就出现了下面的效果:

大家回帖之后就可以下载我的这个多线程实例编译后的EXE了。**** Hidden Message *****我相信一定会有人问我,Multithread与Multithread DLL有什么区别。
Multithread(没有DLL)这个是把C语言运行库和你的程序链接合并到一起了。而Multithread DLL则把C语言运行库单独作为DLL和你的程序分离开来。
如果你只是编写一个简单的、单一的程序,你最好设置成Multithread(没有DLL),让你的程序和C语言运行库合并成一个单一的EXE,这样当你发布你的程序的时候就方便了。
而如果你要编写一个复杂的、庞大的程序,有多个EXE要生成,而且它们都用到了C语言运行库,这个时候就适合选择Multithread DLL,把C语言运行库作为独立的DLL和你的程序放到一起。这样,当你的程序们运行的时候,它们就会共同享用一个C语言运行库(而不是各用各的)。这样你的这些程序们的总体积就会减小,一起运行的时候占用的内存也减小了。但是因为每个程序在运行的时候都要载入一次DLL,导致程序刚开始运行可能会稍微慢一点。

系统 发表于 2014-3-11 13:36:38

系统自动沙发

honglvagan 发表于 2020-12-16 23:18:47

谢谢指路

系统消息 发表于 2020-12-21 09:50:55

VC6的话,用不着静态啊,VC6编译出来是依赖msvcrt.dll,系统都自带这个,而且连部分WinAPI的dll都依赖它,所以单个exe也没有用静态的必要了:lol

aguai2008 发表于 2023-4-20 00:02:15

先做个记号
页: [1]
查看完整版本: 【多线程】VC6使用_beginthread开启多线程的方法