热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Delphi多线程开发注意事项

Q1:多线程中需避免多个线程同时向全局变量进行写入操作,导致访问冲突问题。A1:可以通过使用加锁机制(比如:临界区、互斥、信号量)解决此问题。Q2:多线程中对于结构体和CLASS类型的全局变量

Q1: 多线程中需避免多个线程同时向全局变量进行写入操作,导致访问冲突问题。

A1:  可以通过使用加锁机制(比如:临界区、互斥、信号量)解决此问题。

 

Q2:多线程中对于结构体和CLASS类型的全局变量是需要进行加临界区机制来实现数据同步

A2: 注意:临界区只有在所有的线程都使用它来访问全局内存时才起作用,如果有线程直接调用内存,而不通过临界区,也会造成同时访问的问题。临界区主要是为实现线程之间同步的,但是使用的时候要注意,一定要在使用临界区同步的线程之外建立该临界区(一般在主线程中定义临界区并初始化临界区)。临界区是一个进程里的所有线程同步的最好办法,它不是系统级的,只是进程级的,也就是说它可能利 用进程内的一些标志来保证该进程内的线程同步,据Richter 说是一个记数循环。 临界区只能在同一进程内使用。

 

Q3:多线程模式下ADOQUERY在查询、执行更新或删除操作时有会报错。

A3:现在的解决办法是每个线程对象里创建一个ADOCONNECTION,线程对象内的所ADOQuery都连这个ADOConnection,这样就没有问题了。另外ADOQUERY的OPEN和EXECUTE方法都需要加临界区进行保护。

 

Q4:多线程模式下写日志(写到文件里)时报错,导致转换机宕机

A4:写日志时通过加锁(临界区)的方式来解决此问题

 

Q5:多线程模式下使用TLIST导致操作数据时,发现数据不同步以及会报错现象。

A5:更换为TThreadList就正常。

 

Q6: 多线程模式下使用TStringList导致操作数据时,发现数据不同步以及会报错现象。

A6:继承TStringList派生出一个新类型,对派生类的方法(Add, AddObject, Clear, Delete, Find, Insert等等)进行重载,并对每个方法进行加临界区处理。


推荐阅读
author-avatar
isme7
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有