社区
C++ Builder
帖子详情
系统学习BCB之多线程篇 可以不在主线程里执行VCL组件吗
天下云飞
2003-07-23 11:38:34
看了一下
好像是说要使用VCL组件必须用Synchronize(doIt)同步函数
而同步函数实际上是在主线程中执行
不会吧
如果想使用数据库控件更新数据这样长时操作
主线程界面就死掉的话?
这还有什么搞头
线程里面只能做些数值计算???
这也太逊了吧
...全文
64
16
打赏
收藏
系统学习BCB之多线程篇 可以不在主线程里执行VCL组件吗
看了一下 好像是说要使用VCL组件必须用Synchronize(doIt)同步函数 而同步函数实际上是在主线程中执行 不会吧 如果想使用数据库控件更新数据这样长时操作 主线程界面就死掉的话? 这还有什么搞头 线程里面只能做些数值计算??? 这也太逊了吧
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
「已注销」
2004-01-31
打赏
举报
回复
mark
yesry
2003-07-25
打赏
举报
回复
我觉得任何类的操作都不是线程安全的,因为都有读后写等问题。例如微软的CPen->CreatePen()就不能线程安全。
但是,如果各个线程都是用不同的内存,那就没有问题了。
例如:
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TLabel *Label1;
TLabel *Label2;
TButton *Button1;
TButton *Button2;
TLabel *Label3;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
class update : public TThread
{
private:
protected:
void __fastcall Execute();
public:
__fastcall update(bool CreateSuspended,TLabel *l);
TLabel *label;
};
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
HANDLE hMutex=NULL;
__fastcall update::update(bool CreateSuspended,TLabel *l)
: TThread(CreateSuspended)
{
label=l;
if(hMutex==NULL)hMutex=CreateMutex(NULL,false,NULL);
}
//---------------------------------------------------------------------------
void __fastcall update::Execute()
{
int i=0;
randomize();
int t=rand()%1000;
while(!this->Terminated)
{
Sleep(t);
label->Caption=i++;//这是不用同步的。因为使用了不同的VCL
if(WaitForSingleObject(hMutex,2000)==WAIT_OBJECT_0)//同步一下
{
Form1->Label1->Caption=i++;
ReleaseMutex(hMutex);
}
}
if(hMutex==NULL){CloseHandle(hMutex);hMutex=NULL;}
delete this;
}
//---------------------------------------------------------------------------
update *u1,*u2;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
u1=new update(false,Label2);
Sleep(2000);
u2=new update(false,Label3);
}
//---------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
void __fastcall TForm1::Button2Click(TObject *Sender)
{
u1->Terminate();
u2->Terminate();
}
//---------------------------------------------------------------------------
天下云飞
2003-07-25
打赏
举报
回复
up
asimpleman
2003-07-24
打赏
举报
回复
gz
snla
2003-07-24
打赏
举报
回复
不是星星,洗耳恭听!
天下云飞
2003-07-24
打赏
举报
回复
刚才试了一下
一不小心往数据库里插了1000条数据
不过感觉挺好,哈哈
Ado,DbExpress是线程安全的就好
别的我都很少用了
我不懂电脑
2003-07-24
打赏
举报
回复
数据集控件是线程安全的。
天下云飞
2003-07-24
打赏
举报
回复
matq2008(叶子.net)
刚才看看你不是已经是一颗星了么
恭喜恭喜啊
天下云飞
2003-07-24
打赏
举报
回复
在线程内new TForm1
总是报错canvas does not allow drawing
这是怎么一回事
在线程内可以创建窗体吗
需要做些什么事
叶子哟
2003-07-23
打赏
举报
回复
安全不安全一试就知呀! :)
天下云飞
2003-07-23
打赏
举报
回复
是吗,只是VCL的UI组件需要同步
仔细实验实验
ThinkX
2003-07-23
打赏
举报
回复
VCL的UI组件一般不是线程安全的,所以需要同步一下。
Synchronize其实是象主线程发送一个消息,利用消息队列来同步。
jintaocom
2003-07-23
打赏
举报
回复
呵呵。agree xu_xixnyu!
xu_xinyu
2003-07-23
打赏
举报
回复
有时候听一听大侠们的讲解会清楚一些。
TR@SOE
2003-07-23
打赏
举报
回复
贴主没有仔细看帮助。
如果你看了帮助,你应该知道大部分数据库控件还是线程安全的。
猎人66
2003-07-23
打赏
举报
回复
非也,数据库操作也可以在线程里边的啊
主要是VCL界面组件的更新应该放到Synchronize(doIt)里边
大学生创新创业训练计划经验分享.zip
大学生创新创业训练计划(以下简称为“大创计划”)是一项旨在提升大学生创新能力和创业精神的实践活动。通过这项计划,学生可以在导师的指导下,自
主
开展研究性
学习
和创业实践。下面我将分享一些关于大创计划的经验和建议。
node-v12.22.3-x86.msi
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作
系统
上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态
系统
的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件
系统
、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
毕业设计-The coding solutions of Leetcode and 剑指Offer using .zip
这
里
为你收集整理了关于毕业设计、课程设计可参考借鉴的资料一份,质量非常高,如果你投入时间去研究几天相信肯定对你有很大的帮助。到时候你会回来感谢我的。 本资源是经过本地编译测试、可打开、可运行的项目、文件或源码,可以用于毕业设计、课程设计的应用、参考和
学习
需求,请放心下载。 祝愿你在这个毕业设计项目中取得巨大进步,顺利毕业! 但还需强调一下,这些项目源码仅供
学习
和研究之用。在使用这些资源时,请务必遵守学术诚信原则和相关法律法规,不得将其用于任何商业目的或侵犯他人权益的行为。对于任何因使用本资源而导致的问题,包括但不限于数据丢失、
系统
崩溃或安全漏洞,风险自担哦!
【微信小程序毕业设计】宠物店商城
系统
开发项目(源码+演示视频+说明).rar
【微信小程序毕业设计】宠物店商城
系统
开发项目(源码+演示视频+说明).rar 【项目技术】 微信小程序开发工具+java后端+mysql 【演示视频-编号:282】 https://pan.quark.cn/s/cb634e7c02b5 【实现功能】 本
系统
实现的是和宠物相关的信息管理和发布,加入了商品销售的功能。操作角色为管理员和用户、商家,管理员的功能为用户管理、商家管理、宠物分类管理、宠物信息管理、商品分类管理、宠物用品管理、项目类型管理、服务项目管理、宠物日志管理、订单管理等;用户的功能为购买宠物、商品、预约服务发表日志管理订单等。商家功能为提供宠物、宠物用品、宠物服务,管理订单和服务预约等。
雷迪森的工具包(95分以上课程大作业).zip
Java SSM项目是一种使用Java语言和SSM框架(Spring + Spring MVC + MyBatis)开发的Web应用程序。SSM是一种常用的Java开发框架组合,它结合了Spring框架、Spring MVC框架和MyBatis框架的优点,能够快速构建可靠、高效的企业级应用。 1. Spring框架:Spring是一个轻量级的Java开发框架,提供了丰富的功能和模块,用于开发企业级应用。它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的Web框架,用于开发Web应用程序。它采用MVC(Model-View-Controller,模型-视图-控制器)的架构模式,将应用程序分为模型层、视图层和控制器层,提供了处理请求、渲染视图和管理流程的功能。 3. MyBatis框架:MyBatis是一个持久层框架,用于与数据库进行交互。它提供了一种将数据库操作与Java对象映射起来的方式,避免了手动编写繁琐的SQL语句,并提供了事务管理和缓存等功能,简化了数据库访问的过程
C++ Builder
13,825
社区成员
102,679
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章