首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

怎样利用线程 随时中止循环的有关问题,

2012-02-05 
怎样利用线程 随时中止循环的问题,急啊。有一个循环很耗时,比如:intt0for(inti0i 100000i++){t++if(

怎样利用线程 随时中止循环的问题,急啊。
有一个循环很耗时,比如:
int   t=0;
for   (int   i=0;i <100000;i++)   {   t++;if(t> 1000)   t=0;}

我怎样利用线程随时中止这个循环啊!!!!!

最好给我一个实例(以上面这个例子就行),刚学bcb不久,望各位高人指点一二,谢谢!

分不多,莫见怪。


[解决办法]
创建一个全局变量,在头文件内

bool done;

// 构造函数内

done = false;

// 线程内

for (int i=0;i <100000;i++)
{
if ( dont == true ) // 其它单元重设, done = true 时跳出循环
break;
t++;if(t> 1000) t=0;
}

这种方法比较简单,但不是最理想的,你还可以用消息、或者全局原子来实现,不过基本原理差不多
[解决办法]
#include "Unit1.h "
//---------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm "
TForm1 *Form1;
bool stop=false;
//---------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------
void loop1() //线程函数
{
int t=0;
for (int i=0;i <100000;i++)
{
t++;
if(t> 1000)
t=0;
if(stop)break; //标志
}
}
//---------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
CreateThread(NULL,0,LPTHREAD_START_ROUTINE(loop1),NULL,0,NULL); //创建线程
}
//---------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
stop=true; //中止循环标志
}
//---------------------------------------

热点排行