LPTHREAD

LPTHREAD

LPTHREAD指向一個函數,該函數通知宿主某個線程已開始執行。

函數指針


.NET Framework 4 版 中已棄用此函數指針。

定義


typedef DWORD (__stdcall *LPTHREAD_START_ROUTINE) ( [in] LPVOID lpThreadParameter);

參數


lpThreadParameter
[in] 一個指向已經開始執行的代碼的指針。

備註


LPTHREAD_START_ROUTINE 指向的函數是回調函數,並且必須由承載應用程序的編寫器實現。

例子


API::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)UpdateThread,(LPVOID)ThreadPara,CREATE_SUSPENDED,&ThreadId);
//開始一個計算線程 來創建線程
以下是部分代碼(在一個循環里創建線程):
DWORD ThreadId;
while(threadcount> =threadcounts)
{
Sleep(50);
Form1-> Edit3-> Text =AnsiString(Close_Pass);
Form1-> Label3-> Caption=IntToStr(threadcount);
Application-> ProcessMessages();
}
int t=ThreadPara-> emun_i;
strcpy(Close_Pass,ThreadPara-> emun_str[ThreadPara-> emun_i-1]);
HANDLE m_hHandle;
m_hHandle=::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)UpdateThread,(LPVOID)ThreadPara,CREATE_SUSPENDED,&ThreadId);//開始一個計算線程
SetThreadPriority(m_hHandle,THREAD_PRIORITY_HIGHEST);
ResumeThread(m_hHandle);
//---------------------------------------------------------------------------
#ifndef MainH
#define MainH
//---------------------------------------------------------------------------
#include
#include
#include
#include
#include
//---------------------------------------------------------------------------
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
//---------------------------------------------------------------------------
#include
#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
{
if(SystemAffinityMask&(1 <
{
dynamic_cast (FindComponent( "SpeedButton "+IntToStr(i+1)))-> Enabled=true;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
if(!Sender-> InheritsFrom(__classid(TSpeedButton)))
{
return;
}
TSpeedButton *Button=dynamic_cast (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
{
TComponent *comp=Components[i];
if(comp-> InheritsFrom(__classid(TSpeedButton)))
dynamic_cast (comp)-> Down=false;
}
Sleep(1000);
}
//---------------------------------------------------------------------------
//TSpeedButton的Caption分別為1~32的數字。