我用了CreateThread做了多线程
想让多核的CPU的核心1,2分别运行我的线程1,2 怎么办啊????
想让多核的CPU的核心1,2分别运行我的线程1,2 怎么办啊????
解决方案 »
- STTSPlayString
- 请问怎样在主窗体里面强制关闭另一个窗体?
- 关于线程synchronize函数的用法问题
- 请问在delphi中如何引用gdiplus.dll动态联接库呢?如有使用例子,能否给小弟看一看呢?谢谢。
- excel和access的连接查询,在线等,up有分!!!
- 请问病毒是如何写出来的??
- 是Delphi的BUG,还是我错了???
- 请高手指教DELPHI里面操作WORD的问题
- 现在可不可以用Delphi6来开发商业软件??会不会还有什么Bug?
- UpdateSQL怎么实现对数据库的修改!我真的很急阿!
- 如何让程序在规定的时间内执行某个按钮的功能?
- 高手帮忙看下这段代码,为什么不能循环?谢谢了!!!
//---------------------------------------------------------------------------#ifndef MainH
#define MainH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.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;
TSpeedButton *SpeedButton33;
TSpeedButton *SpeedButton34;
TSpeedButton *SpeedButton35;
TSpeedButton *SpeedButton36;
TSpeedButton *SpeedButton37;
TSpeedButton *SpeedButton38;
TSpeedButton *SpeedButton39;
TSpeedButton *SpeedButton40;
TSpeedButton *SpeedButton41;
TSpeedButton *SpeedButton42;
TSpeedButton *SpeedButton43;
TSpeedButton *SpeedButton44;
TSpeedButton *SpeedButton45;
TSpeedButton *SpeedButton46;
TSpeedButton *SpeedButton47;
TSpeedButton *SpeedButton48;
TSpeedButton *SpeedButton49;
TSpeedButton *SpeedButton50;
TSpeedButton *SpeedButton51;
TSpeedButton *SpeedButton52;
TSpeedButton *SpeedButton53;
TSpeedButton *SpeedButton54;
TSpeedButton *SpeedButton55;
TSpeedButton *SpeedButton56;
TSpeedButton *SpeedButton57;
TSpeedButton *SpeedButton58;
TSpeedButton *SpeedButton59;
TSpeedButton *SpeedButton60;
TSpeedButton *SpeedButton61;
TSpeedButton *SpeedButton62;
TSpeedButton *SpeedButton63;
TSpeedButton *SpeedButton64;
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 <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);
}
//---------------------------------------------------------------------------
呵呵,谢谢三楼
SetThreadAffinityMask是对线程的,呵呵
TCPUTester = Class(TThread)
private
FButton: TSpeedButton;
protected
procedure Execute;override;
public
constructor Create(Button:TSpeedButton ;
CreateSuspended: Boolean=true;
CPUMark: LongWord=1);
destructor Destroy;override;
end;procedure TCPUTester.Execute;
begin
while ((Not Terminated) and (FButton.Down)) do;
end;constructor TCPUTester.Create(Button: TSpeedButton ;
CreateSuspended: boolean;
CPUMark: LongWord)begin
FButton := Button;
Inherited Create(CreateSuspended);
FreeOnTerminate:=true;
SetThreadAffinityMask (Handle,1 shr (CPUMark-1));
end;
destructor TCPUTester.Destroy;
begin
FButton:=NIL;
Inherited;
end;//---------------------------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
var
ProcessAffinityMask: LongWord;
SystemAffinityMask: LongWord;
I: Integer;
begin
if Not(GetProcessAffinityMask( GetCurrentProcess(),
ProcessAffinityMask,
SystemAffinityMask)) then begin
Application.Terminate();
exit;
end; for i:=0 to sizeof(SystemAffinityMask)*8 - 1 do begin
if(SystemAffinityMask and (1 shr i)) <> 0 then
begin
TSpeedButton(FindComponent('SpeedButton'+IntToStr(i+1))).Enabled:=true;
end;
end;end;
//---------------------------------------------------------------------------
procedure TForm1.SpeedButton1Click(Sender: TObject );
var
CPUTester:TCPUTester ;
Button: TSpeedButton ;
begin
if Not (Sender Is TSpeedButton) then
begin
Exit;
end;
Button:=Sender as TSpeedButton;
if(NIL=Button)then Exit; if Not(Button.Down) then
begin
Exit;
end;
CPUTester:= TCPUTester.Create(Button,true,StrToInt(Button.Caption));
if(NIL=CPUTester) then
begin
exit;
end;
CPUTester.Resume();
end;
//---------------------------------------------------------------------------
procedure TForm1.FormDestroy(Sender: TObject );
var
I: Integer;
comp: TComponent;
begin
for i:=0 to ComponentCount-1 do
begin
comp:=Components[i];
if(comp is TSpeedButton) then
TSpeedButton(comp).Down:=false;
end;
Sleep(1000);
end;
//---------------------------------------------------------------------------