多线程使用

olivertree 2003-02-04 01:42:11
首先,我祝大家新年快乐!身体健康!
是这样的,在做一些消耗较大的程序时,比如说大量数据导入阿什么的,总是很占用系统资源,运行一下大约都是90%左右,而且在运行时,打开别的窗口,数据导入的窗口就很难打开、界面上的静态控件也显示不出来。所以我想用多线程实现,比如一个用来显示界面;一个用来响应用户突然的中断,另一个才是执行导入的。可是由于我对于多线程并不熟悉,还请大家赐教!
在这里先谢谢大家了!
...全文
69 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiuafa 2003-05-03
  • 打赏
  • 举报
回复
接分
litvalley 2003-04-25
  • 打赏
  • 举报
回复
UP
watercelery 2003-02-28
  • 打赏
  • 举报
回复

你只要再开1个线程就可以了,你的默认程序会自动开一个,优先级是tpNormal,你只要再开一个优先级比这个低的线程做大数据量的计算,应用程序可以控制这个线程的挂起和唤醒。
这东西不好说,我给你个线程的例子看看吧。
一共有3个一样的CheckBox,每个对应一个Edit控件,该控件中是数字,表示线程的优先级.
void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{
int x,y;
if(CheckBox1->Checked)
{
x=160;
y=CheckBox1->Top+CheckBox1->Height/2;
//Edit1->Text="2";
if(Ball1==NULL) Ball1=new TSquareThread(clRed,x,y);
Ball1->Resume();
}
else
Ball1->Suspend();
}

void __fastcall TForm1::Edit1Change(TObject *Sender)
{
if(Ball1!=NULL)
{
int nPri=StrToInt(Edit1->Text);
switch(nPri)
{
case 2: Ball1->Priority=tpLowest; break;
case 3: Ball1->Priority=tpLower; break;
case 4: Ball1->Priority=tpNormal; break;
case 5: Ball1->Priority=tpHigher; break;
case 6: Ball1->Priority=tpHighest; break;
default: Ball1->Priority=tpNormal;
}
}
}


线程:
void __fastcall TSquareThread::Execute()
{
Step=1;
do
{
x1=x2;
x2=x2+Step;
if(x2<160) Step=1;
else if(x2>(Form1->ClientWidth-15))
Step=-1;
Synchronize(Paint);

}while(!Terminated);


//---- Place thread code here ----
}
//---------------------------------------------------------------------------
__fastcall TSquareThread::TSquareThread(TColor Col,int XPos,int YPos,bool CreateSuspended):TThread(CreateSuspended)
{
EColor=Col;
x2=XPos;
x1=x2;
y=YPos;
}
void __fastcall TSquareThread::Paint()
{
Form1->Canvas->Pen->Color=Form1->Color;
Form1->Canvas->Brush->Color=Form1->Color;
Form1->Canvas->Rectangle(x1-5,y-5,x1+5,y+5);
Form1->Canvas->Pen->Color=EColor;
Form1->Canvas->Brush->Color=EColor;
Form1->Canvas->Rectangle(x2-5,y-5,x2+5,y+5);
}


class TSquareThread ;
class TSquareThread : public TThread
{
private:
TColor EColor;
int x1,x2,y;
long Step;
protected:
void __fastcall Execute();
void __fastcall Paint();
public:
//__fastcall TSquareThread(bool CreateSuspended);
__fastcall TSquareThread::TSquareThread(TColor Col,int XPos,int YPos,bool CreateSuspended);
};

class TForm1 : public TForm
{
__published: // IDE-managed Components
TPanel *Panel1;
TCheckBox *CheckBox1;
TCheckBox *CheckBox2;
TCheckBox *CheckBox3;
TEdit *Edit1;
TEdit *Edit2;
TEdit *Edit3;
void __fastcall CheckBox1Click(TObject *Sender);
void __fastcall Edit1Change(TObject *Sender);
void __fastcall FormDestroy(TObject *Sender);
void __fastcall CheckBox2Click(TObject *Sender);
void __fastcall Edit2Change(TObject *Sender);
private: // User declarations
TSquareThread *Ball1,*Ball2,*Ball3;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Robin 2003-02-22
  • 打赏
  • 举报
回复
呵呵!关注ing !
halibut 2003-02-22
  • 打赏
  • 举报
回复
up!
lanren_me 2003-02-22
  • 打赏
  • 举报
回复
Synchronize();

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧