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

关于线程句柄的有关问题,难者不会,会者不难,100分,待.

2012-03-07 
关于线程句柄的问题,难者不会,会者不难,100分,在线等待...关于bcb的线程使用:我新建一个工程,然后,开一个

关于线程句柄的问题,难者不会,会者不难,100分,在线等待...
关于bcb的线程使用:
    我新建一个工程,然后,开一个新线程,线程里面什么都不做,就循环10000次的加操作,线程的FreeOnTerminate是True;
    按照bcb的说法,这个线程自己执行完毕后是可以自动销毁的,我在主窗体中新开了10个线程,把线程对象指针放入一个数组中.
    现在有几个问题
1.线程结束后,存放在数组中的对象指针依然是没有变化的,线程的handle也没有变化

2.查看windows的进程管理器,发现这个程序多出了10个handles对象,即使线程运行完毕后,10个handle对象依然存在,也就是说,存在内存的泄露问题.

3.既然线程结束后,线程的handle依然没有变化,那么论坛上的一些例子说可以用WaiteForSingelObject(handle,....)来等待线程运行完毕,不是永远都等待在那里了吗?

程序如下:


//主窗体代码
//---------------------------------------

#include   <vcl.h>
#pragma   hdrstop

#include   "Unit1.h "
#include   "Unit2.h "
//---------------------------------------
#pragma   package(smart_init)
#pragma   resource   "*.dfm "
TForm1   *Form1;
tt*   arr[10];
//---------------------------------------
__fastcall   TForm1::TForm1(TComponent*   Owner)
                :   TForm(Owner)
{
    for(int   i=0;i <10;i++)
    {
      arr[i]=NULL;

    }
}
//---------------------------------------

void   __fastcall   TForm1::Button1Click(TObject   *Sender)
{
    for(int   i=0;i <10;i++)
    {
        tt   *thread=new   tt(false);
        arr[i]=thread;
        int   q=arr[0]-> Handle;

}
}
//---------------------------------------
void   __fastcall   TForm1::btn1Click(TObject   *Sender)
{
    mmo1-> Lines-> Clear();
for(int   i=0;i <10;i++)
{
  AnsiString   str;
  str=IntToStr(i)+ ":     handle   : "+IntToStr(arr[i]-> Handle)+ "对象: "+IntToStr((int)arr[i]);
  mmo1-> Lines-> Add(str);

}
}
//---------------------------------------

//线程代码

__fastcall   tt::tt(bool   CreateSuspended)
                :   TThread(CreateSuspended)
{
}
//---------------------------------------
void   __fastcall   tt::Execute()
{
  for(int   i=0;i <100000;i++)   int   q=0;
}
//---------------------------------------
 


[解决办法]
需要CloseHandle的
[解决办法]
他等待的不是这个句柄本身的值,而是该线程对象中的项

热点排行