C++ Builder XE8 安卓开发之indy10的线程控件如何正确调用VCL控件
2015-08-25 19:04
232 查看
首先引用如下文字:
我们都知道,C++Builder编程是建立在VCL类库的基础上的。在程序中经常需要访问VCL对象的属性和方法。不幸的是,VCL类库并不保证其中对象的属性和方法是线程访问安全的(Thread_safe),访问VCL对象的属性或调用其方法可能会访问到不被别的线程所保护的内存区域而产生错误。因此,TThread对象提供了一个Synchronize方法,当需要在线程中访问VCL对象属性或调用方法时,通过Synchronize方法来访问属性或调用方法就能避免冲突,使各个线程之间协调而不会产生意外的错误。
也就是说,在indy 10中的线程控件(如图)中
要使用VCL控件,例如Memo控件,一定要使用Synchronize方法来调用,这样能有效避免莫名其妙的卡死和显示不正常的现象。
例程:
我们都知道,C++Builder编程是建立在VCL类库的基础上的。在程序中经常需要访问VCL对象的属性和方法。不幸的是,VCL类库并不保证其中对象的属性和方法是线程访问安全的(Thread_safe),访问VCL对象的属性或调用其方法可能会访问到不被别的线程所保护的内存区域而产生错误。因此,TThread对象提供了一个Synchronize方法,当需要在线程中访问VCL对象属性或调用方法时,通过Synchronize方法来访问属性或调用方法就能避免冲突,使各个线程之间协调而不会产生意外的错误。
也就是说,在indy 10中的线程控件(如图)中
要使用VCL控件,例如Memo控件,一定要使用Synchronize方法来调用,这样能有效避免莫名其妙的卡死和显示不正常的现象。
例程:
void __fastcall TForm2::Display(void) { Memo1->Text = L"在线程中显示文字"; } //-------------------------------------------------------------------------- void __fastcall TForm2::IdThreadComponent1Run(TIdThreadComponent *Sender) { IdThreadComponent1->Synchronize(Display); }
相关文章推荐
- C语言常用的小代码
- C语言编译动态或者 静态库
- C++ 学习笔记
- VC++ 常见调试错误:fatal error LNK1561: entry point must be defined
- C语言中isalnum()函数和isalpha()函数的对比使用
- C语言基础知识之(六):数组-----数组类型、定义数组、读取数组、排序数组、字符串数组函数
- 从今天起开始认真学习C++primer plus
- 《算法导论》的基数排序 C++实现
- 递归求字母集合的子集C++
- C语言如何使标准输出重定向到一个文件
- C语言中isdigit()函数和isxdigit()函数的用法
- C++预言中的const
- hdu2522 A simple problem(数学)
- C++智能指针
- C++ List 双向链表 实现 会用也要会写
- C语言动态内存分配函数解析
- const的常见用法
- 排序算法之希尔排序(C语言实现)
- MFC视频教程(孙鑫)学习笔记2-掌握C++
- 一个包含所有c++的头文件的头文件