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

请问一个线程有关问题

2012-03-21 
请教一个线程问题我的目的是在主程序里产生一个线程,线程读取一个命令文件。void__fastcallTMainForm::Load

请教一个线程问题
我的目的是在主程序里产生一个线程,线程读取一个命令文件。
void   __fastcall   TMainForm::LoadCommandClick(TObject   *Sender)
{
            cf=true;
           
            Command1   =   new     CommandFile(false);       //   creat   a   new   thread
         
}
在线程里面我执行读取文件和执行命令

void   __fastcall   CommandFile::Execute()
{
      String   commandfile,s;
      char   *line;
      char   cFirst,   cSecond;
      String   sCommandnum;
      int   i,j;
      int   loop_begin,loop_end,cont=0;
      char   *cBuffer;
      long   begin,end,icount;

      line   =   new   char   [40];
      line= " ";

      MainForm-> OpenDialog1-> FileName= " ";
      MainForm-> OpenDialog1-> Execute();
      commandfile=MainForm-> OpenDialog1-> Files-> Text;
      if(MainForm-> OpenDialog1-> FileName.Length()!=0)               //   if   filename   is   not   empty
        {
            commandfile=MainForm-> OpenDialog1-> FileName;
            ifstream   cfile   (commandfile.c_str());
            if   (cfile.is_open())
              {
                      begin   =   cfile.tellg();
                      cfile.seekg   (0,   ios::end);
                      end   =   cfile.tellg();
                      icount=end-begin;
                      if(icount> 0)
                          {
                                  cBuffer   =   new   char   [icount];
                                  cfile.seekg   (0,   ios::beg);
                                  cfile.read   (cBuffer,   icount);
                            }
                      cfile.close();
                      j=0;
                      line= " ";
                      for(i=0;i <icount;i++)
                            {
                                  line[j]=cBuffer[i];


                                  j++;
                                  if(line[j-1]== '\n ')
                                  {
                                      line[j]=0;
                                      if(line[0]== 'L '&&   line[1]== '0 ')     //   set   loop   start   pointer
                                                  loop_begin=i;

                                      if(line[0]== 'L '&&   (line[1]== '2 '||line[1]== '3 '))
                                              {
                                                  loop_end=i;                       //   set   loop   end   pointer
                                                  cont=i;                                 //   set   continuse   pointer
                                                  i=loop_begin;                     //   jump   to   loop   start
                                                  MainForm-> loop_flag=true;
                                              }
                                      if(MainForm-> loop_flag   &&   i==loop_end)         //jump   to   loop   start
                                                  i=loop_begin;

                                      GoCommand(line);//   这是一个线程里的子函数

                                      if(   !MainForm-> loop_flag   &&   cont!=0)             //   continue   excute   command   file


                                            {
                                                i=cont;
                                                cont=0;
                                            }
                                      for(j=0;j <4;j++)   line[j]=0;   //   initialize   line
                                      j=0;
                                      if(MainForm-> bW_answer   ||   waitflag==true)
                                              this-> Suspend();                     //   pause   excute   next   command   till   get   answer
                                              waitflag=false;
                                  }

                            }

              }
        }
        delete[]   cBuffer;
        delete[]   line;
        MainForm-> cf=false;

}

问题是当第一次执行完命令文件,线程应该结束了,这个时候我应该可以开始另外一个新的线程来执行其他命令文件,可是实际上当我开始另外一个线程(在主程序里按LoadCommand   Button)时,出现错误:HLS5010.exe   raise   exception   calss   EAccess   with   message   "Access   violation   at   address   004B080A   in   module   HLS5010.exe ".   请高手帮我看看,到底是哪里错了?是不是上一个线程没结束呢?
哪里有线程的例子可以参考一下呢.谢谢了


[解决办法]
第一次运行完,支持终结,没有被释放
你可以在函数尾加一个 this-> Free(); 完成一个自我释放。

热点排行