LPT目故上HREAD_START_ROUTINE是一种函数,该函数指向一个函数,通知宿主某个线程已开始执行。
LPT来自HREAD_START_ROUTINE函数指针
.NET Framework 4 版 中已弃用此函数指针。
typedef DWORD (__stdcall *LPTHREA360百科D_START_R此损挥获尔干OUTINE) ( [in] LPVOID lpThreadParameter);
lpTh余气众readParameter
[in] 一个指向已经开始执行的代码的指针。
LPTHREAD_START_ROUTINE 指向的函数是回调函数,并且来自必须由承载应用程序的编写器实现。
API::CreateTh360百科read(NULL,0,(LPTHREAD_START_ROUTINE)Updat根黑兵北虽况带规eThread,(LPVOID)ThreadPara,CREATE_SUSPENDED,&ThreadId);
//开始一个计算线程 来创建线程
以下是部分代码(在一个循环里创建线程):
DWORD ThreadId;
while(threadcount> =threadcounts)
{
S上leep(50);
Form1-> Edit3-> Text =AnsiString(Close_Pass);
Form1-> Label3-> Caption=Int喜苏探盾雷吸盐的责益ToStr(threadcount)参地加压研;
Application-> ProcessMessages();
}
int t=ThreadPara-> emun_i;
strcpy(Close_Pass,Threa检板头专异措单全晚阻善dPara-> emun_str[ThreadPara-> emun_i-1]);
HANDLE m_它为装育速六完卷谁hHandle;
m_hHandle=::CreateThread(NULL无若论沿益达决,0,(LPTHREAD_START_ROUTINE)UpdateThread,(LPVOID)Thre儿过席富岁重往盾点若创adPara,CREATE_SUSPENDED,&ThreadId);//开始一个门坏袁铁重入座松快距死计算线程
SetThreadPriority(m_hHandle,THREAD_P告雷火细RIORITY_HIG雷查HEST);
ResumeThread(m_hHandl卷农e);
//-----------------------------------------------------------------------早手----
#ifndef MainH
#define MainH
/向此求差绿看算/----------------到地沿扩----------------------------------------流贵黄评民-------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <Std厚西血Ctrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
//---------------------------------------------------------------------------
class TCPUTester:public TThread
{
private:
TSpeedButton *FButton;
void __fastcall Execute(void);
public:
__fastcall TCPUTester(TSpeedButton *Button,
bool CreateSuspended=true,
unsigned long CPUMark=1);
__fastcall ~TCPUTester(void);
};
class TForm1 : public TForm
{
__published: // IDE-managed Components
TSpeedButton *SpeedButton1;
TSpeedButton *SpeedButton2;
TSpeedButton *SpeedButton3;
TSpeedButton *SpeedButton4;
TSpeedButton *SpeedButton5;
TSpeedButton *SpeedButton6;
TSpeedButton *SpeedButton7;
TSpeedButton *SpeedButton8;
TSpeedButton *SpeedButton9;
TSpeedButton *SpeedButton10;
TSpeedButton *SpeedButton11;
TSpeedButton *SpeedButton12;
TSpeedButton *SpeedButton13;
TSpeedButton *SpeedButton14;
TSpeedButton *SpeedButton15;
TSpeedButton *SpeedButton16;
TSpeedButton *SpeedButton17;
TSpeedButton *SpeedButton18;
TSpeedButton *SpeedButton19;
TSpeedButton *SpeedButton20;
TSpeedButton *SpeedButton21;
TSpeedButton *SpeedButton22;
TSpeedButton *SpeedButton23;
TSpeedButton *SpeedButton24;
TSpeedButton *SpeedButton25;
TSpeedButton *SpeedButton26;
TSpeedButton *SpeedButton27;
TSpeedButton *SpeedButton28;
TSpeedButton *SpeedButton29;
TSpeedButton *SpeedButton30;
TSpeedButton *SpeedButton31;
TSpeedButton *SpeedButton32;
void __fastcall SpeedButton1Click(TObject *Sender);
void __fastcall FormDestroy(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
/************/
/* CPP单元 */
/************/
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Main.h "
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm "
TForm1 *Form1;
void __fastcall TCPUTester::Execute(void)
{
while((!this-> Terminated)&&(FButton-> Down));
}
__fastcall TCPUTester::TCPUTester(TSpeedButton *Button,
bool CreateSuspended,
unsigned long CPUMark)
:FButton(Button), TThread(CreateSuspended)
{
this-> FreeOnTerminate=true;
SetThreadAffinityMask ((void *)this-> Handle,1 < <(CPUMark-1));
}
__fastcall TCPUTester::~TCPUTester(void)
{
FButton=NULL;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
DWORD ProcessAffinityMask;
DWORD SystemAffinityMask;
if(!GetProcessAffinityMask( GetCurrentProcess(),
&ProcessAffinityMask,
&SystemAffinityMask))
{
Application-> Terminate();
}
for(int i=0;i <sizeof(SystemAffinityMask)*8;i++)
{
if(SystemAffinityMask&(1 < <i))
{
dynamic_cast <TSpeedButton*> (FindComponent( "SpeedButton "+IntToStr(i+1)))-> Enabled=true;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
if(!Sender-> InheritsFrom(__classid(TSpeedButton)))
{
return;
}
TSpeedButton *Button=dynamic_cast <TSpeedButton*> (Sender);
if(NULL==Button)
return;
if(!Button-> Down)
{
return;
}
TCPUTester *CPUTester=new TCPUTester(Button,true,StrToInt(Button-> Caption));
if(NULL==CPUTester)
{
return;
}
CPUTester-> Resume();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
for(int i=0;i <ComponentCount;i++)
{
TComponent *comp=Components[i];
if(comp-> InheritsFrom(__classid(TSpeedButton)))
dynamic_cast <TSpeedButton *> (comp)-> Down=false;
}
Sleep(1000);
}
//---------------------------------------------------------------------------
//TSpeedButton的Caption分别为1~32的数字。
1、《MSDN》
2、书库亚洲(shuku asia)编程频道