在vc++.net托管中使用线程的一个例子

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

程序是用来测试线程

于CPU的主频不同以及运行的进程数不同结果会稍有不同

考资料<Visual C++.NET编程经典———从C++到Visual C++.NET快速进阶>

Aravind Corera Stephen Fraser 等著 乐思(wrox)出版社出

file://http://p2p.wrox.com

#include "stdafx.h"

#using <mscorlib.dll>

#include <tchar.h>

using namespace System;

using namespace System::Threading; file://为线程管理提供方法和属性

__gc class gcsimple

{

public:

gcsimple();

void ThreaFunc1();

private:

String *strToday;

};

gcsimple::gcsimple()

{

strToday=DateTime::Now.ToShortDateString();

}

void gcsimple::ThreaFunc1()

{

Console::WriteLine(S"今天是{0}",strToday);

for(int i=0;i<10;i++)

{

Console::WriteLine(S"进程号={0},i={1}",AppDomain::GetCurrentThreadId().ToString(),i.ToString());

for(int j=0;j<1000000000;j++)

int jj=j*j;

}

}

int _tmain(void)

{

Console::WriteLine(S"这是一个进程测试程序");

gcsimple *st=new gcsimple();

ThreadStart *d1=new ThreadStart(st,gcsimple::ThreaFunc1); file://定义一个委托指向要执行的线程,委托的声明部分以由系统定义

Thread *t1=new Thread(d1); file://将委托指针传递给Thread类并由Thread类来管理线程

Console::WriteLine(S"t1的状态{0}",__box(t1->ThreadState));

Console::WriteLine(S"启动t1所管理的线程");

t1->Start(); file://启动t1所管理的线程

Thread::Sleep(0); file://返回主线程t1所管理的线程与主线程并行执行

Console::WriteLine(S"t1的状态是{0}",__box(t1->ThreadState));

t1->Suspend(); file://挂起t1所指的线程

Thread::Sleep(0);

Console::WriteLine(S"t1的状态是{0}",__box(t1->ThreadState));

t1->Resume(); file://恢复t1所指的线程

Thread::Sleep(0);

Console::WriteLine(S"t1的状态是{0}",__box(t1->ThreadState));

t1->Join(); file://结束线程添加此方法后将使t1所管理的线程在高优先级执行,线程结束后在返回主线程执行

Console::WriteLine(S"t1所管理的线程已经结束");

return 0;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航