C/C++学习 初识多线程 _beginthread()函数

C/C++学习 初识多线程 _beginthread()函数

#include

#include

#include

#include

using namespace std;

void test0(void *){

cout << "test0" << endl;

}

int main(){

cout << "start" << endl;

_beginthread(test0, 0, NULL);

cout << "over" << endl;

return 0;

}

// 代码实际输出:

/*

start

over

*/

注意到test0函数并没有被执行,这是因为main函数是主线程函数,在main函数中创建的线程属于子线程,主线程总是能优先获得CPU的控制权,使得子线程没有执行的机会,在主线程结束时,子线程也被迫结束。在main函数最后加上system("pause"); 语句则test函数将被执行。

但是,如果有多个子线程,其执行顺序是不确定的:

void test0(void *){

cout << "test0" << endl;

}

void test1(void *){

cout << "test1" << endl;

}

int main(){

cout << "start" << endl;

_beginthread(test0, 0, NULL);

_beginthread(test1, 0, NULL);

cout << "over" << endl;

system("pause");

return 0;

}

// 代码实际输出:

/*

start

over

test1

test0

*/

这样不同线程之间的执行顺序是不确定的,我们希望对线程的执行进行一些操作。

首先我们引入Sleep()函数,这个函数使当前线程(在哪个函数内部定义Sleep()函数就是哪个线程)至少休眠多少毫秒。

void test0(void *){

Sleep(50);

cout << "test0" << endl;

}

void test1(void *){

cout << "test1" << endl;

}

int main(){

cout << "start" << endl;

_beginthread(test0, 0, NULL);

_beginthread(test1, 0, NULL);

Sleep(500);

// _beginthread(test1, 0, NULL);

cout << "over" << endl;

system("pause");

return 0;

}

// 代码实际输出:

/*

start

test1

test0

over

*/

需要注意的是,Sleep()函数并不能保证线程严格按照规定的时间运行。

1. 当我们用_beginthread()函数创建一个线程之后,这个线程将马上伺机执行,但是需要等待CPU为其分配资源,线程执行的顺序是不一定的(完全有可能最先创建的线程最后执行);

2. main函数是主线程函数,在main函数中创建的线程为子线程。在主线程结束后子线程将被迫停止,因此子线程实际上不会被执行;

3. 为了执行子线程,可以将主线程一直运行,如while(1);或者system("pause");

也可以将某个线程强制休眠,用Sleep()函数。Sleep()函数将指定某个线程至少休眠多长时间。

相关推荐

汇率换算器:1 港币(HKD) 兑换 人民币(CNY)
bt365全程担保下载

汇率换算器:1 港币(HKD) 兑换 人民币(CNY)

07-08 👁️ 7213
小米手机换外屏:价格、因素及省钱攻略
一瓶红牛的热量
365沙巴体育注册

一瓶红牛的热量

08-26 👁️ 7060