2.线程共享进程数据

实验目的

  1. 学习创建线程实现多工作同步运行;
  2. 了解线程与进程之间的数据共享关系。

实验内容

在进程中定义全局共享数据,在线程中直接引用该数据进行更改并输出该数据。

程序框架

static int count;//全局变量,属于主进程,主进程创建的线程共享此数据。

void main()
{
//创建新线程
//用WaitForSingleObject()等待线程运行结束
}
 

在上述等待函数处,进程等待线程运行,如果进程不等待,主进程结束时,系统会清理进程资源,也就清除了线程运行的一切资源,线程没来得及运行就结束了,也可以用Sleep()实现进程等待

需要用到的函数

线程函数

DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
for(count=1;count<=5;count++)//循环5次,改变全局变量count的值
{
//输出count
}
//线程结束
}

CreateThread

用于创建新线程,返回线程的句柄。

HANDLE CreateThread( 
LPSECURITY_ATTRIBUTES lpThreadAttributes,//线程安全属性 
DWORD dwStackSize, // 线程初始栈大小
LPTHREAD_START_ROUTINE lpStartAddress, //线程函数入口地址,通常用线程函数名
LPVOID lpParameter, //给新线程传递参数
DWORD dwCreationFlags, //设置新线程的附加标记,为0时,新线程立即运行
LPDWORD lpThreadId //用来返回新线程的线程ID,如果不感兴趣,设为NULL
); 

WaitForSingleObject

等待线程完成可以用WaitForSingleObject函数实现等待。

hHandle参数指定需要等待的对象句柄。

dwMilliseconds 参数指定需要等待的时间,以ms为单位。
0表示立即返回不等待。INFINITE表示等待直到对象句柄可用。

DWORD WaitForSingleObject( 
HANDLE hHandle, //指定需要等待的对象句柄。
DWORD dwMilliseconds //指定需要等待的时间
);

上代码

#include<iostream>
#include<windows.h>
using namespace std;
static int count=10;
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
	cout<<"新线程运行!"<<endl; 
	Sleep(1000);
	for(count=1;count<=5;count++)//循环5次,改变全局变量count的值
	{
		cout<<"线程count="<<count<<endl;
		Sleep(1000);
	}
	cout<<"线程等待5秒"<<endl;
	Sleep(5000);
	cout<<"新线程结束"<<endl; 
}

int main()
{
	cout<<"进程运行!"<<endl;
	cout<<"进程count="<<count<<endl;
	Sleep(2000); 
	HANDLE hThread=CreateThread(NULL,0,ThreadProc,NULL,0,NULL);
	WaitForSingleObject(hThread,INFINITE);
	cout<<"线程count="<<count<<endl;
	Sleep(1000);
	cout<<"进程结束"<<endl;
	return 0;
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值