~~~~~~~~~~~~~~~~多线程求助:)))))

gfwawj 2003-05-15 02:29:07
我在一个主程序中 for循环

在每一次循环中生成一个线程,每个for中有一个Sleep

大致如下

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

for( int i =0; i < numsome ; i++)
{
mythread[i] = new MyThread( , , )

一些计算

Sleep(100);
}

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


现在的问题是,只要for循环不结束,生成的numsome 个thread,就不进行。

开始以为是Sleep()的问题,索性将Sleep()去掉,可是结果仍旧没有变化。

而我想要实现的是,每次for循环生成的thread就去做自己的事情,而不是整个

for循环都结束都,numsome 个thread一起去做。


谢谢大家先:)))))

//-----------------------------------------------------------------
详细的程序:

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

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "releasethread.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

//TreleaseThread * myrelease;
TreleaseThread * myrelease[100];


//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{



for(int i=0 ;i<100;i++)
{

Form1->Memo1->Text = Form1->Memo1->Text + "\r\n";
Form1->Memo1->Text = Form1->Memo1->Text + "~~~~~ NO. ~~~ " + i + "\r\n";
GetLocalTime(&SysTime);
mysystime = ((SysTime.wHour*60 + SysTime.wMinute)*60
+ SysTime.wSecond)*1000 + SysTime.wMilliseconds;

Form1->Memo1->Text = Form1->Memo1->Text + +"mysystime : "
+ mysystime
+ "\r\n";

if(myrelease[i] != NULL)
{
ShowMessage(" hehe~~~~~~~~~~~~~");
myrelease[i]->Resume();
myrelease[i]->Terminate();
}


myrelease[i] = new TreleaseThread(100);
myrelease[i]->Priority = tpHigher; //tpNormal;
myrelease[i]->FreeOnTerminate = true;
myrelease[i]->Resume();



Sleep(200);

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

#include <vcl.h>
#pragma hdrstop

#include "releasethread.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------

// Important: Methods and properties of objects in VCL can only be
// used in a method called using Synchronize, for example:
//
// Synchronize(UpdateCaption);
//
// where UpdateCaption could look like:
//
// void __fastcall TreleaseThread::UpdateCaption()
// {
// Form1->Caption = "Updated in a thread";
// }
//---------------------------------------------------------------------------

__fastcall TreleaseThread::TreleaseThread(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
__fastcall TreleaseThread::TreleaseThread(int time,
bool CreateSuspended ): TThread(CreateSuspended)
{

rmytime = time;


}
//---------------------------------------------------------------------------
void __fastcall TreleaseThread::Release()
{

GetLocalTime(&RSysTime);
rmysystime = ((RSysTime.wHour*60 + RSysTime.wMinute)*60
+ RSysTime.wSecond)*1000 + RSysTime.wMilliseconds;

Form1->Memo2->Text = Form1->Memo2->Text + +"mysystime : "
+ rmysystime
+ "\r\n";
}
//---------------------------------------------------------------------------

void __fastcall TreleaseThread::Execute()
{
//---- Place thread code here ----
Sleep(rmytime);
Synchronize(Release);

//Release();
}
//---------------------------------------------------------------------------

...全文
48 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
gfwawj 2003-05-16
  • 打赏
  • 举报
回复
主要问题在于
Synchronize(Release);
要避免和main VCL冲突,所以只好等主程序结束了,呵呵。
gfwawj 2003-05-15
  • 打赏
  • 举报
回复
to penu(懒猫·达也)
to lanren_me(阿波)

你们的意思我明白,我也是这样做的

要不线程也不会自己在主程序的for完之前,才一起执行吧。

我觉得一定是什么堵住了子线程的进展,和主程序很有关系,但是不知在哪里?:(((

penu 2003-05-15
  • 打赏
  • 举报
回复
你光new出线程来而不执行怎么行呢?
lanren_me 2003-05-15
  • 打赏
  • 举报
回复
在线程始添加:

FreeOnTerminate=true;

启动线程使用
TThread *mythread[i] = new TreleaseThread(false)

13,825

社区成员

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

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