社区
VCL组件使用和开发
帖子详情
多线程应用
olivertree
2003-02-04 01:43:45
首先,我祝大家新年快乐!身体健康!
是这样的,在做一些消耗较大的程序时,比如说大量数据导入阿什么的,总是很占用系统资源,运行一下大约都是90%左右,而且在运行时,打开别的窗口,数据导入的窗口就很难打开、界面上的静态控件也显示不出来。所以我想用多线程实现,比如一个用来显示界面;一个用来响应用户突然的中断,另一个才是执行导入的。可是由于我对于多线程并不熟悉,还请大家赐教!
在这里先谢谢大家了!
...全文
17
3
打赏
收藏
多线程应用
首先,我祝大家新年快乐!身体健康! 是这样的,在做一些消耗较大的程序时,比如说大量数据导入阿什么的,总是很占用系统资源,运行一下大约都是90%左右,而且在运行时,打开别的窗口,数据导入的窗口就很难打开、界面上的静态控件也显示不出来。所以我想用多线程实现,比如一个用来显示界面;一个用来响应用户突然的中断,另一个才是执行导入的。可是由于我对于多线程并不熟悉,还请大家赐教! 在这里先谢谢大家了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
牧牛人软件
2003-02-05
打赏
举报
回复
一段清理数据的代码
*.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 ----
}
/
shclhs
2003-02-05
打赏
举报
回复
找本书看看。
flmn
2003-02-04
打赏
举报
回复
好多东西
找个教程好好看看
2021全网最详细【WEB前端】从零入门实战教程,全课程119节
包括HTML5概述、Web开发历史、HTML5文档结构异同与创建HTML5文档、设计HTML5表单、使用HTML5绘画、HTML5音频与视频、如何实现Web本地存储、如何实现Web离线
应用
、如何设计
多线程
应用
、如何实现移动互联网中地图定位...
java
多线程
应用
场景
(5)tomcat、tomcat内部采用
多线程
,数百个客户端访问同一WEB
应用
程序,tomcat访问后,将后续处理投入新的线程进行处理,该新的线程最后调用我们的servlet程序。调用一种方法时等待一段时间(一般是给定时间段),...
编写
多线程
应用
程序,模拟多个人通过一个山洞的模拟
编写
多线程
应用
程序,模拟多个人通过一个山洞的模拟。 这个山洞每次只能通过一个人,每个人通过山洞的时间为5秒(sleep), 随机生成3个人,同时准备过此山洞,显示一下每次通过山洞人的姓名及年龄, 以及...
浅谈C++中的
多线程
(三):Qt中的
多线程
应用
本篇文章围绕以下几个问题展开: ...前三个问题已经在之前两篇文章中讲解,本篇文章作为结尾篇来讲解最后一个问题:Qt中的
多线程
应用
。 四.Qt中的
多线程
应用
1.引入 程序由单线程到
多线程
,就像以前是一个人干...
QT
多线程
应用
QT
多线程
的实现有两种方法,一种是继承QThread的
多线程
使用方法,另外一种是使用QObject实现多线的方法。传统的方式是继承QTread,但是这种方式比较的容易出错,QT官方推荐使用的是第二种方式。这里介绍这两种方式的...
VCL组件使用和开发
604
社区成员
13,460
社区内容
发帖
与我相关
我的任务
VCL组件使用和开发
C++ Builder VCL组件使用和开发
复制链接
扫一扫
分享
社区描述
C++ Builder VCL组件使用和开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章