CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  VCL组件使用和开发

多线程应用

楼主olivertree(忽然间上进起来了)2003-02-04 13:43:45 在 C++ Builder / VCL组件使用和开发 提问

首先,我祝大家新年快乐!身体健康!  
      是这样的,在做一些消耗较大的程序时,比如说大量数据导入阿什么的,总是很占用系统资源,运行一下大约都是90%左右,而且在运行时,打开别的窗口,数据导入的窗口就很难打开、界面上的静态控件也显示不出来。所以我想用多线程实现,比如一个用来显示界面;一个用来响应用户突然的中断,另一个才是执行导入的。可是由于我对于多线程并不熟悉,还请大家赐教!  
      在这里先谢谢大家了! 问题点数:100、回复次数:3Top

1 楼flmn(川流不息)回复于 2003-02-04 15:26:21 得分 25

好多东西  
   
  找个教程好好看看Top

2 楼wgh166(涌金水牛)回复于 2003-02-05 08:39:18 得分 50

一段清理数据的代码  
   
  *.h  
  //---------------------------------------------------------------------------  
   
  #ifndef   TranHistoryH  
  #define   TranHistoryH  
  //---------------------------------------------------------------------------  
  #include   <Classes.hpp>  
  #include   <mmsystem.hpp>  
  #include   <Controls.hpp>  
  #include   <StdCtrls.hpp>  
  #include   <Forms.hpp>  
  #include   <ComCtrls.hpp>  
  #include   <Buttons.hpp>  
  #include   <ExtCtrls.hpp>  
  #include   <Db.hpp>  
  #include   <DBTables.hpp>  
  #include   <ADODB.hpp>  
  #include   <DB.hpp>  
  //---------------------------------------------------------------------------  
  class   TCleanForm   :   public   TForm  
  {  
  __published: //   IDE-managed   Components  
                  TGroupBox   *GroupBox2;  
                  TLabel   *Label1;  
                  TLabel   *Label2;  
                  TDateTimePicker   *DateTimePicker1;  
                  TButton   *Button1;  
                  TButton   *Button3;  
                  TProgressBar   *ProgressBar1;  
                  TTimer   *Timer1;  
                  TADOStoredProc   *ADOStoredProc1;  
                  void   __fastcall   Button1Click(TObject   *Sender);  
                  void   __fastcall   Button3Click(TObject   *Sender);  
                  void   __fastcall   FormShow(TObject   *Sender);  
                  void   __fastcall   Timer1Timer(TObject   *Sender);  
  private: //   User   declarations  
   
  public: //   User   declarations  
                  __fastcall   TCleanForm(TComponent*   Owner);  
                  int   __fastcall   DeleteData(char   *sDate);  
                  int   num;  
                  void   __fastcall   DisplayResult(TObject   *);  
  };  
  //---------------------------------------------------------------------------  
  extern   PACKAGE   TCleanForm   *CleanForm;  
  //---------------------------------------------------------------------------  
  *.cpp  
   
   
  //---------------------------------------------------------------------------  
  #include   <dos.h>  
  #include   <stdio.h>  
   
  #include   <vcl.h>  
  #pragma   hdrstop  
  #include   "CleanDataThread.h"  
  #include   "TranHistory.h"  
  #include   "main.h"  
  //---------------------------------------------------------------------------  
  #pragma   package(smart_init)  
  #pragma   resource   "*.dfm"  
  TCleanForm   *CleanForm;  
  //---------------------------------------------------------------------------  
  __fastcall   TCleanForm::TCleanForm(TComponent*   Owner)  
                  :   TForm(Owner)  
  {  
  }  
   
   
   
  void   __fastcall   TCleanForm::Button1Click(TObject   *Sender)  
  {  
  AnsiString   sBdate,   sCdate;  
  int   ymd[2][3],   i,   num;  
  char   tmp[16],   sDate[16],   msg[32];  
  TCleanDataThread   *   CleanDataThread;  
  memset(tmp,   0,   16);  
  sBdate=DateTimePicker1->DateTime.FormatString("yyyy-mm-dd");  
  sCdate   ="20"   +     DateTimePicker1->Date.CurrentDate();  
   
  strncpy(tmp,   sBdate.c_str(),   10);  
  ymd[0][0]=atoi(tmp);  
  for(i=4;i<10;i++){  
                  if(tmp[i]=='-'   &&   i<6)   ymd[0][1]=atoi(tmp+i+1);  
                  if(tmp[i]=='-'   &&   i>5)   ymd[0][2]=atoi(tmp+i+1);  
                  }  
   
  memset(tmp,   0,   16);  
  strncpy(tmp,   sCdate.c_str(),   10);  
  ymd[1][0]=atoi(tmp);  
  for(i=4;i<10;i++){  
                  if(tmp[i]=='-'   &&   i<6)   ymd[1][1]=atoi(tmp+i+1);  
                  if(tmp[i]=='-'   &&   i>5)   ymd[1][2]=atoi(tmp+i+1);  
                  }  
   
  if(ymd[0][0]*10000   +   ymd[0][1]*100   +   ymd[0][2]>ymd[1][0]*10000   +   ymd[1][1]*100   +   ymd[1][2]){  
                  ShowMessage("处理日期不能大于今日!!");  
                  return;  
                  }  
   
  sprintf(sDate,"%d-%d-%d",ymd[0][0],ymd[0][1],ymd[0][2]);  
  //ShowMessage(CleanForm->DateTimePicker1->Date.FormatString("yyyy-mm-dd"));  
  ProgressBar1->Enabled=true;  
   
  sndPlaySound("../sound/Notify.wav",   SND_SYNC);  
  if(Application->MessageBox("请确认是否要清理数据!!",   "确认",   MB_OKCANCEL)   !=   IDOK)   return;  
   
  Timer1->Enabled=true;  
  ProgressBar1->Position=0;  
  CleanForm->Button1->Enabled=false;  
  CleanDataThread   =   new   TCleanDataThread(sDate);  
  CleanDataThread->Priority   =   tpIdle;//优先级低  
   
  CleanDataThread->OnTerminate=DisplayResult;//线程停止  
   
  }  
   
  void   __fastcall   TCleanForm::DisplayResult(TObject   *)  
  {  
  char   msg[60];  
     
                  Button1->Enabled=true;  
                  Timer1->Enabled=false;  
                  ProgressBar1->Position=ProgressBar1->Max;  
                  sprintf(msg,"共清除   %d   条数据\0",   num);  
                  ShowMessage(msg);  
   
  }  
  //---------------------------------------------------------------------------  
   
   
  void   __fastcall   TCleanForm::Button3Click(TObject   *Sender)  
  {  
  Close();  
  }  
  //---------------------------------------------------------------------------  
   
  void   __fastcall   TCleanForm::FormShow(TObject   *Sender)  
  {  
  struct   date   d;  
  char   tmp[32];  
   
   
        getdate(&d);  
        sprintf(tmp,   "%d-%d-%d\0",   d.da_year-1,d.da_mon,   d.da_day);  
        DateTimePicker1->Date=AnsiString(tmp);  
        Button1->Enabled=true;  
        ProgressBar1->Position=0;  
        ProgressBar1->Enabled=false;  
        Button1->Enabled=MainForm->IsAdmin;  
  }  
  //---------------------------------------------------------------------------  
   
   
  void   __fastcall   TCleanForm::Timer1Timer(TObject   *Sender)  
  {  
  ProgressBar1->Position   +=5;  
  if(ProgressBar1->Position==ProgressBar1->Max)  
            ProgressBar1->Position=0;  
  }  
  //---------------------------------------------------------------------------  
   
   
   
   
   
   
   
  //---------------------------------------------------------------------------  
   
  #ifndef   CleanDataThreadH  
  #define   CleanDataThreadH  
  //---------------------------------------------------------------------------  
  #include   <Classes.hpp>  
  //---------------------------------------------------------------------------  
  class   TCleanDataThread   :   public   TThread  
  {  
  private:  
            //   void     __fastcall   CleanData();  
  protected:  
                  void   __fastcall   Execute();  
                  void     __fastcall   CleanData();  
  public:  
               
                  __fastcall   TCleanDataThread(AnsiString   sdate);  
   
  };  
  //---------------------------------------------------------------------------  
  #endif  
   
  *.cpp  
   
  //---------------------------------------------------------------------------  
   
  __fastcall   TCleanDataThread::TCleanDataThread(AnsiString   sdate)  
                  :   TThread(false)  
  {  
  }  
   
  void   __fastcall   TCleanDataThread::CleanData()  
  {  
   
                                  try{  
   
                           
                                  CleanForm->ADOStoredProc1->Parameters->Items[1]->Value=CleanForm->DateTimePicker1->Date.FormatString("yyyy-mm-dd");  
                         
                                  CleanForm->ADOStoredProc1->ExecProc();  
                                  CleanForm->num=CleanForm->ADOStoredProc1->Parameters->Items[0]->Value;  
   
                                  }  
                                  catch   (Exception   &exception)  
                                  {  
                                    Application->ShowException(&exception);  
   
                                  }  
   
   
  }  
   
  //---------------------------------------------------------------------------  
  void   __fastcall   TCleanDataThread::Execute()  
  {  
  CleanData();  
                  //----   Place   thread   code   here   ----  
  }  
  /  
  Top

3 楼shclhs(hello)回复于 2003-02-05 13:14:34 得分 25

找本书看看。Top

相关问题

  • ActiveX中多线程的应用问题
  • PB中应用多线程的解决方法
  • 在Visual Basic.Net中怎么创建多线程应用程序啊
  • 如何在remoting应用中使用多线程!
  • ▂ ▃ ▄ ▅ ▆ ▇ █ 暴血管推荐:多线程应用程序的源代码 █ ▇ ▆ ▅ ▄ ▃ ▂
  • 多线程应用程序中可否用CString
  • 多线程 网络应用, 帮忙看看, 谢谢!
  • 100分的问题(关于多线程数据库应用程序)
  • 多线程应用中,如何调用FreeLibrary()才能保证不死机?
  • 多线程啊多线程

关键词

  • 多线程
  • 数据
  • ymd
  • tcleanform
  • cleandatathread
  • fastcall
  • cleanform
  • sbdate
  • scdate
  • progressbar

得分解答快速导航

  • 帖主:olivertree
  • flmn
  • wgh166
  • shclhs

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo