C++中应用windows系统中的线程实例

sapzj1984 2007-11-09 10:36:09
操作系统课程中的一个线程程序,我加入了时间输出,可以很容易分析出线程的运行过程,

代码如下:

#include <stdio.h>
#include <windows.h>
#include <iostream.h>
#include <winbase.h>
#include <time.h>

clock_t t0, t1;//设置的两个时钟,为了计算所用时间
double d; //计算时间之差的秒数

void SubThread(void) //子线程
{
int i;
for(i=0;i<5; i++)
{
t1=clock();
d=(double)(t1-t0)/CLOCKS_PER_SEC;
cout<<"SubThread "<<i<<endl;
cout<<"time: "<<d<<" secends"<<endl;
Sleep(2000);
t1=clock();
d=(double)(t1-t0)/CLOCKS_PER_SEC;
cout<<"sleep(2000)time: "<<d<<" secends"<<endl;
}
}


void main()
{
cout<<"Create Thread"<<endl;

DWORD IDThread;
HANDLE hThread;
hThread= CreateThread(
NULL,
0,
(LPTHREAD_START_ROUTINE)SubThread,
NULL,
0,
&IDThread);

if(hThread==NULL)
{
cout<<"Create Thread error!"<<endl;
return;
}

int i;
t0=clock();
for(i=0; i<5; i++)
{
t1=clock();
d=(double)(t1-t0)/CLOCKS_PER_SEC;
cout<<"MainThread "<<i<<endl;
cout<<"time: "<<d<<" secends"<<endl;

if(i==1){
if(SuspendThread(hThread)==0xFFFFFFFF){
cout<<"Suspend thread error."<<endl;
}
else{
t1=clock();
d=(double)(t1-t0)/CLOCKS_PER_SEC;
cout<<"Suspend thread is ok."<<endl;
cout<<"time: "<<d<<" secends"<<endl;
}
}
if(i==3){
if(ResumeThread(hThread)==0xFFFFFFFF)
cout<<"Resume thread error."<<endl;
else{
t1=clock();
d=(double)(t1-t0)/CLOCKS_PER_SEC;
cout<<"Resume thread is ok."<<endl;
cout<<"time: "<<d<<" secends"<<endl;
}
}
Sleep(4000);
t1=clock();
d=(double)(t1-t0)/CLOCKS_PER_SEC;
cout<<"sleep(4000)time: "<<d<<" secends"<<endl;
}//end_for
t1=clock();
d=(double)(t1-t0)/CLOCKS_PER_SEC;
cout<<"use time: "<<d<<" secends"<<endl;
}


执行结果如下:

Create Thread
MainThread 0
time: 0 secends
SubThread 0
time: 0 secends
sleep(2000)time: 2 secends
SubThread 1
time: 2 secends
sleep(4000)time: 4 secends
MainThread 1
time: 4 secends
Suspend thread is ok.
time: 4 secends
sleep(4000)time: 8 secends
MainThread 2
time: 8 secends
sleep(4000)time: 12 secends
MainThread 3
time: 12 secends
Resume thread is ok.
time: 12 secends
sleep(2000)time: 12 secends
SubThread 2
time: 12 secends
sleep(2000)time: 14 secends
SubThread 3
time: 14 secends
sleep(4000)time: 16 secends
MainThread 4
time: 16 secends
sleep(2000)time: 16 secends
SubThread 4
time: 16 secends
sleep(2000)time: 18 secends
sleep(4000)time: 20 secends
use time: 20 secends
Press any key to continue

《C++编程艺术》(美Herbert Schildt著 曹蓉蓉 刘小荷翻译 2005)中对C++的线程有这样一段:

C++是为所有类型的程序设计类型设计的,从嵌入式系统(在执行环境中没有操作系统)到高度分布的、基于GUI的终端用户应用程序以及介于二者之间的一切程序。因此,C++不能够对它的执行环境加入明显的限制。内建的对多线程的支持将会从根本上将C++限制在那些支持多线程的环境中,从而阻止了在不使用线程的环境中开发软件是使用C++。
...全文
108 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

566

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧