专家请进,如何判断多线程全部结束?

zsloyes 2009-05-07 10:55:21
在主窗口,动态创建几个线程,每个线程会往主窗口的TStringList写字符串,然后线程自己结束
问题是,在主窗口中,有什么方法可以知道,动态创建的几个线程已经全部结束?
线程的实现框架:

//---------------------------------------------------------------------------

__fastcall TMyThread::TMyThread(bool CreateSuspended)
: TThread(CreateSuspended)
{
this->FreeOnTerminate = true;
}
//---------------------------------------------------------------------------
void __fastcall TMyThread::Execute()
{
//往主窗口的 TStringList 添加字符串
this->Terminate();
}
//---------------------------------------------------------------------------
...全文
135 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
安馨安旭 2009-05-09
  • 打赏
  • 举报
回复
建议建立一个链表,将所有线程的handle都存储起来,这样你就可以方便的对每个线程进行检查和操作了。
zsloyes 2009-05-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 Hou_Rj 的回复:]
线程全部结束告诉主线程,如同读者写者之类问题中的最后一个读者离开时需要通知写者。
信号量机制可以解决。
[/Quote]
请问能否说的跟详细点?在主程序中,如何使用信号量机制?
Hou_Rj 2009-05-08
  • 打赏
  • 举报
回复
线程全部结束告诉主线程,如同读者写者之类问题中的最后一个读者离开时需要通知写者。
信号量机制可以解决。
hello_en 2009-05-08
  • 打赏
  • 举报
回复
信号量
jame2001 2009-05-07
  • 打赏
  • 举报
回复
在主窗口調用, m_RunThread 結束後會自動呼叫ThreadEnd

void __fastcall MainForm::ThreadEnd(TObject * Sender)
{
End_Thread_Count++;
}

void __fastcall MainForm::CreateEnd(void)
{
m_RunThread = new MyThread();
m_RunThread->OnTerminate = ThreadEnd;
}
我不懂电脑 2009-05-07
  • 打赏
  • 举报
回复
可以设一个全局变量计数器,在退出时计数。注意同步如:
Void __fast call TProducerThread:: Execute ()
{
 //---- Place thread code here ----
 Int i = 0;
 Int j;
 while(i<100) //每个生产者线程生产100个商品
 {
  Sleep(1000);//延迟,为清楚得显示执行效果
  if(Form1->buffer_size > 0)//缓冲池不空,通知消费者消费
  {
   Form1->Begin Consumer->Set Event ();
 }
 Form1->Produce Guard->Acquire ();
 i++;
 StrResult = IntToStr (i);
 J = Form1->buffer_size;
 Form1->Product [j] = i;
 Form1->buffer_size++;
 Synchronize(Show Result);//刷新界面,显示最新生产-消费状况
 Form1->Begin Consumer->Set Event();//通知消费者消费
 if(Form1->buffer_size == 5)//缓冲池满,挂起生产者线程,直到通知再生产
 {
  Form1->Begin Produce->Wait For (INFINITE);
 }
 Sleep (1000);
 Form1->Produce Guard->Release ();
}
While (Form1->buffer_size > 0)
{
 Form1->Begin Consumer->Set Event ();
}
}

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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