//在前面发布的文章中,有一篇描述线程池,从Task派生出一个类,需要实现虚函数Exec()。
//那么本篇呢,定义Task类型的变量,它的pWorkExec成员需要绑定一个函数。
//我们还要定义一个线程类
//主画面上第二个按钮是创建线程。
//TMyTest.h
#ifndef TMyTestH
#define TMyTestH
#include "visSimpleThreadPool.h"
//---------------------------------------------------------------------------
class TMyTest : public TThread
{
protected:
void __fastcall Execute();
void RunTask_test(TWork *pWork );
public:
__fastcall TMyTest(bool CreateSuspended);
};
extern TMyTest *MyTest ;
#endif
//-----------------------------------------------------------------------------------------------------------
//TMyTest.cpp
//---------------------------------------------------------------------------
#pragma hdrstop
#include "TMyTest.h"
#include "FormMain.h"
#include "visSimpleThreadPool.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
TMyTest *MyTest;
TWork MyWork[2];
void TMyTest::RunTask_test (TWork *pWork )
{
char str[100];
for (int i = 0; i < 100; i++)
{ sprintf(str,"RunTask_test%d\n",i);
OutputDebugStringA(str);
}
}
void __fastcall TMyTest::Execute()
{
for (int i = 0; i < 2; i++)
MyWork[i].SetWorkIsEnd() ;
while(!Terminated)
{
for (int i = 0; i < 2; i++)
{ if ( MyWork[i].WorkIsEnd())
{
MyWork[i].TagIndex = i ;
MyWork[i].pWorkExec =RunTask_test ;//绑定函数
MyWork[i].WorkEnd = false ;//有这行,只跑一次
g_pThreadWorkList->AddWork(&MyWork[0]);
}
}
}
}
__fastcall TMyTest:: TMyTest(bool CreateSuspended): TThread(CreateSuspended)
{
}
//
//--------------------------------------------------------------------------------
//主画面FormMain.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "visSimpleThreadPool.h"
#include "FormMain.h"
#include "TMyTest.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
class Work1;
TForm7 *Form7;
Work1 *pwork1;
class Work1:public TWork
{ public:
void Exec()
{ char str[100];
for (int i = 0; i < 100; i++)
{ sprintf(str,"%d\n",i);
OutputDebugStringA(str);
}
}
};
//---------------------------------------------------------------------------
__fastcall TForm7::TForm7(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm7::FormCreate(TObject *Sender)
{
pwork1=new Work1;
g_pThreadWorkList = new TThreadWorkList(10);
}
//---------------------------------------------------------------------------
void __fastcall TForm7::FormClose(TObject *Sender, TCloseAction &Action)
{
if(g_pThreadWorkList)
{
delete g_pThreadWorkList;
}
delete pwork1;
if (MyTest) delete MyTest;
}
//---------------------------------------------------------------------------
void __fastcall TForm7::Button1Click(TObject *Sender)
{
g_pThreadWorkList->AddWork(pwork1);
}
//---------------------------------------------------------------------------
void __fastcall TForm7::Button2Click(TObject *Sender)
{
MyTest=new TMyTest(false);
}