~~~~~~~~~~~~~~~~多线程求助:)))))
我在一个主程序中 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();
}
//---------------------------------------------------------------------------