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等等)进行重载,并对每个方法进行加临界区处理。

Delphi多线程开发注意事项的更多相关文章

  1. springboot下多线程开发注意事项

    基于springboot的多线程程序开发过程中,由于本身也需要注入spring容器进行管理,才能发挥springboot的优势.所以这篇文字主要用来记录开发中两者结合时需要注意的一些事项. 第一步我们 ...

  2. delphi 串口 关于RS485总线通信协议开发注意事项

    http://blog.csdn.net/shjhuang/article/details/9426739 关于RS485总线通信协议开发注意事项 1       前言 近段时间发现我们系统在进行设备 ...

  3. 转:学习笔记:delphi多线程学识

    学习笔记:delphi多线程知识 最近一直在温习旧的知识,刚好学习了一下Java的线程安全方面的知识,今天想起之前一直做的Delphi开发,所以还是有必要温习一下,看看这些不同的编程语言有什么不同之处 ...

  4. Java进阶(三)多线程开发关键技术

    原创文章,同步发自作者个人博客,转载请务必以超链接形式在文章开头处注明出处http://www.jasongj.com/java/multi_thread/. sleep和wait到底什么区别 其实这 ...

  5. Unity3D开发注意事项

    最近给组里定Unity开发注意事项,参考了@陆泽西在群里分享的[前端开发规范],结合自己工作中的经验,整理一下,下面不少条款都是我们要求在开发中必须遵守的. 资源: 图片统一为png格式,纹理属性:T ...

  6. delphi 多线程3

     多线程程序设计 我们知道,win95或winNT都是“多线程”的操作系统,在DELPHI .中,我们可以充分利用这一特性,编写出“多线程”的应用程序. 对以往在DOS或16位windows下写程序的 ...

  7. .NET基础拾遗(5)多线程开发基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

  8. Java多线程开发系列之番外篇:事件派发线程---EventDispatchThread

    事件派发线程是java Swing开发中重要的知识点,在安卓app开发中,也是非常重要的一点.今天我们在多线程开发中,穿插进来这个线程.分别从线程的来由.原理和使用方法三个方面来学习事件派发线程. 一 ...

  9. Java多线程开发系列之四:玩转多线程(线程的控制2)

    在上节的线程控制(详情点击这里)中,我们讲解了线程的等待join().守护线程.本节我们将会把剩下的线程控制内容一并讲完,主要内容有线程的睡眠.让步.优先级.挂起和恢复.停止等. 废话不多说,我们直接 ...

随机推荐

  1. Caffe学习系列(16):caffe的整体流程

    在某社区看到的回答,觉得不错就转过来了:http://caffecn.cn/?/question/123 Caffe从四个层次来理解:Blob,Layer,Net,Solver. 1.Blob Caf ...

  2. Android权限 uses-permission

    Manifest.permission 官方API说明: http://developer.android.com/reference/android/Manifest.permission.html ...

  3. BZOJ 2412: 电路检修

    Description [0,x]中全是1,其余全是0,每个点有一个权值,求最坏情况下得到x的最小权值. Sol DP+单调队列. 你可以去看我的这篇Blog...开这篇纯属为了骗访问... http ...

  4. ASP.NET MVC 路由调试工具Router Debugger

    直接上图 安装好手动启用或关闭 我开始调试我之前程序中由于路由遇到的问题 当发出 http://localhost:2362/109.html 这样请求, 我的意图是想Article的Details被 ...

  5. VRRP虚拟路由器冗余协议

    VRRP(VirtualRouterRedundancyProtocol,虚拟路由冗余协议)是一种容错协议.通常,一个网络内的所有主机都设置一条缺省路由,这样,主机发出的目的地址不在本网段的报文将被通 ...

  6. REACT 学习

    1.React/React Native 的ES5 ES6写法对照表 http://bbs.reactnative.cn/topic/15/react-react-native-%E7%9A%84es ...

  7. CentOS 6.5 安装Python 3.5

    1.CentOS6.5 安装Python 的依赖包 yum groupinstall "Development tools" yum install zlib-devel bzip ...

  8. C++函数传递指针面试题

    [本文链接] http://www.cnblogs.com/hellogiser/p/function-passing-pointer-interview-questions.html [代码1]   ...

  9. Java集合中List的用法

    List接口是Collection接口的子接口,List有一个重要的实现类--ArrayList类,List中的元素是有序排列的而且可重复,所以被称为是序列. List可以精确的控制每个元素的插入位置 ...

  10. Unity3d 制作物品平滑运动

    直接贴代码了 using UnityEngine; using System; using System.Collections; using System; using DataTable; pub ...