最简单的线程并发例子

C++并发编程(一):并发与并行,一个简单的多线程例子 并发与并行 并发:多个任务可以同时存在。程序在逻辑上可以实现多个任务同时存在,那么这个程序就是并发程序。并发程序在物理实现上既可以是并行,也可以是串行。 串行:单个处理器通过“任务切换”的方式,在一秒之内进行多次任务切换,给人一种任务并发的错觉。同一时间只有一个任务得到处理。 并行:多个任务在多个处理器中同时运行。多个任务在同一时间一起得到处理。 多进程并发与多线程并发 多进程并发:将应... 阅读详情
 
用一个线程来实现这个功能1:变量i从0--40000来循环改变一个label1的值,值和i的值一样
 
然后不用线程也实现这个label2的显示功能2
 
如何把功能1和功能2同时进行?
 
 
 
 
1、建立主程序
2、创建线程对象(FILE->NEW->Thread Object)
3、编写线程代码
   (编写同步方法成员)
4、在主程序中建立线程对象(Create方法)
5、主程序中调用线程
 
 
 
下面的是主程序
unit Unit1;
 
interface
 
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;
 
type
 TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
 private
    { Private declarations }
 public
    { Public declarations }
 end;
 
var
 Form1: TForm1;
implementation
 
uses Unit2;
 
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
 i:integer;
 TestThread:CTestThread;
begin
 TestThread:=CTestThread.Create(False);
 for i:=1 to 40000 do
 begin
    Label1.Caption:=IntToStr(i);
 end;
 TestThread.Terminate;
end;
 
end.
 
以下是线程单元代码,Excute是线程单元的入口函数
unit Unit2;
 
interface
 
uses
    SysUtils,Classes,Unit1;
 
type
 CTestThread = class(TThread)
 private
    procedure Test;
    { Private declarations }
 protected
    procedure Execute; override;
 end;
 
implementation
 
procedure CTestThread.Execute;
begin
 { Place thread code here }
 { Place thread code here }
 while not Terminated do
 begin
    Synchronize(Test); //同步化机制..
 end;
end;
 
procedure CTestThread.Test;
var
 i:integer;
begin
 for i:=1 to 40000 do
    Form1.Label2.Caption:=IntToStr(i);
end;
end.
 
 
 
 
 
 
1、我知道TMsgThread.Create(True)这样可以创建一个线程,如果参数为true,线程创建但不执行。
否则,如果是false,创建并且执行线程。
2、FreeOnTerminate:=true;线程执行完毕以后就自动释放了
3、线程创建很消耗资源。所以如果定时要执行线程的代码,就不要把它释放。
 
基于以上的考虑,我对下面的代码是这样使用的。
 
{线程类定义}
TMsgThread = class(TThread)
 private
    { Private declarations }
    procedure ShowInMemo;
 protected
    procedure Execute; override;
 public
   
 end;
 
procedure TWeather.Execute;
begin
 { Place thread code here }
 FreeOnTerminate:=false;//不释放
 Synchronize(ShowInMemo);
end;
 
{主程序}
var
 newThrd:TMsgThread;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 newThrd:=TMsgThread.Create(True);
 with newThrd do
    begin
    Resume;
    end;
 
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
 
 newThrd.free; //主窗体关闭的时候释放线程对象
end;
 
 
 
 
线程同步问题
 
1、哪些东西要用同步Synchronize? 我知道可视化组件不支持是都不支持吗?
 
2、我的项目是收到数据用线程1处理保存,如果电脑快速收数据,我的的线程1基本上都用到可视化组件(adoquery/spcomm)也就是都要用Synchronize保护吧?
 
3、如果我想提高速度是不是用多套组件好一些,比如adoquery1、2、3 当收到数据加上一个序号地,运行线程时如果mod3=0、1、2就用不同的adoquery?
 
 
 
和界面GUI有关的时候用Synchronize.
 
ADOQuery并不是可视控件,所以也用不到。
 
线程在执行一个长时间的操作/循环时使用,如果是收数据的速度很快,保存数据的速度相对慢的话,最主要的不是用几个ADOQuery而是如何将这发来的数据快速接收。你的串口一秒能来多少数据呀!
 
要不还是开一个缓冲区,将串口来的数据全部先保存到缓冲区中,然后开一个线程,线程时创建一个ADOQuery将缓冲区数据保存。这样你的数据来的在快也没有关系了。
 
C++多线程并发总结 文章目录线程创建与管理并发与并行多线程并发与多进程并发C++线程创建线程创建的简单示例线程同步之互斥锁lock与unlock保护共享资源lock_guard与unique_lock保护共享资源timed_mutex与recursive_mutex提供更强大的锁线程同步之条件变量异步编程使用promise与future传递结果使用packaged_task与future传递结果 线程创建与管理 并发... 阅读详情

相关推荐

1. Golang线程安全(简单例子)

并发导致的问题 var money int = 0 func add(pint *int) { for i := 0; i < 100000; i++ { *pint++ } } func AddMoney() { for i := 0; i < 1000; i++ { // 这里使用了协程调用,导致多个协程调用同一个资源,产生资源竞争,结果不正确 go add(&money) } time.Sleep(time.Second*5) fmt.Println.

lihaoen666的博客 1697

并发和并行

并行并发

m0_64884960的博客 1776

java 多线程并发实例

代码里面包含一个并发4个线程同时运行 全部开始 全部停止 单个停止还有点问题。 还有生产者消费者 里面的里面能帮助你理解多线程的运用!

实际场景中的多线程并发编程案例

一、CountDownLatch CountDownLatch的用法 CountDownLatch典型用法1:某一线程在开始运行前等待n个线程执行完毕。将CountDownLatch的计数器初始化为n new CountDownLatch(n) ,每当一个任务线程执行完毕,就将计数器减1 countdownlatch.countDown(),当计数器的值变为0时,在CountDownLatch上 await() 的线程就会被唤醒。一个典型应用场景就是启动一个服务时,主线程需要等待多个组件加载完毕,之后再继

iNiBuBian的博客 8996

电商秒杀场景下,如何用Redis+Lua脚本实现原子性库存扣减(附完整代码)

本文针对电商秒杀场景下的高并发与超卖难题,详细解析了如何利用Redis的原子性命令与Lua脚本实现可靠的库存扣减。通过对比多种方案,阐述了Redis+Lua作为黄金搭档的技术原理,并提供了从基础扣减到预扣减模型的完整代码实现,确保在高并发下数据的一致性与系统性能。

weixin_29219539的博客 503

Django Cookie/Session

Cookie是一种小型的文本文件,通常由Web服务器发送到用户浏览器,并存储在用户的本地计算机上。当用户再次访问该网站时,浏览器会将Cookie发送回服务器,从而实现用户身份验证、个性化设置等功能。Session是一种在服务器端存储用户会话信息的方式。与Cookie不同,Session数据存储在服务器上,而不是客户端。Django框架通过在客户端存储一个Session ID来实现Session的跟踪。Django框架的Cookie/Session机制为开发者提供了方便的数据存储和会话管理功能。

froginwe11的博客 467

Java 多线程与并发(案例 + 应用)

1. 传统 创建线程的两种方式 2. 传统 定时器技术 3. 传统线程 互斥技术 4. 传统线程 同步通信技术 5. 线程范围内 共享变量 概念和作用 6. ThreadLocal类及应用技巧 7. 多个线程之间 共享数据的方式 8. Java 原子性类的应用 9. Java 线程并发库的应用(线程池) 10. Callable 与 future的应用 11. 线程锁的技术 12. Java 读写锁技术的使用 13. Java 条件阻塞condition的应用 14. Semaphore(信号灯)同步工具

探索技术与实践的旅程,分享编程经验与工具使用心得,助力开发者提升技能。 4134

STM32F103单片机驱动TM1637数码管显示模块

最近项目中需要用到数码管显示,于是买了一个TM1637芯片驱动的四位数码显示模块,现将调试过程记录一下,方便以后参考。 使用的单片机是STM32F103C8T6最小系统 使用的数码管模块是TM1637四位数码管显示模块 实际运行效果 下面先看一下TM1637和数码管连接的具体线路图 实际使用的模块没有带按键,只用了4个数码管,模块和单片机连接只需要4根线VCC、GND、CLK、DIO。芯片和单片机通信使用的是I2C总线,下面就来说一下如何...

HXYDJ的博客 1万+

java 多线程并发,及spring boot 中应用示例

java 多线程并发问题,及spring boot 中应用示例

qq_41917433的博客 1463

SAP财务模块必看:BAPI_ACC_DOCUMENT_POST扩展字段全攻略(含FIBF配置)

本文详细解析了SAP财务模块中如何利用BAPI_ACC_DOCUMENT_POST的EXTENSION1参数扩展自定义字段。文章从需求分析入手,对比了传统增强与BTE(业务交易事件)两种技术路径,并重点提供了基于FIBF配置的完整实战指南,包括数据结构理解、函数模块开发及配置步骤,帮助ABAP开发者和财务顾问高效、可维护地实现如WBS元素、税务代码等字段的灵活传递。

weixin_29290963的博客 396

土壤水动力学_前 言

Van Genuchten (V-G) 模型是土壤水分特征曲线中最常用的模型之一。它通过数学方程描述了土壤基质吸力与体积含水量之间的关系,被广泛应用于土壤水分运移、土壤盐渍化、边坡稳定性等研究领域。V-G模型是描述土壤水分特征曲线的重要工具,但它并不是完美的。在实际应用中,需要根据土壤类型、试验条件等因素选择合适的模型。土壤基质吸力是土壤水分学中的一个重要概念,它对土壤水分的保持、植物的生长以及土壤的工程性质都有重要影响。

weixin_44259522的博客 5327

2、并发问题举例

买票

qq_39037116的博客 533

SLAM工程师面试避坑指南:2025年最新高频考点与实战代码解析

本文为SLAM工程师提供2025年最新面试避坑指南,涵盖高频技术考点如VINS初始化、三维几何处理、多传感器融合架构设计等,并包含实战代码解析。特别针对算法工程师面试中的常见陷阱,提供系统设计框架和代码模板,帮助求职者提升通过率。

metaverse5vr的博客 246

JAVA并发多线程:卖票例子最简单版(第一集)——代码篇

卖票代码(最初的样子) class TicketForNoSychronized{ //买了多少张? private static Integer saledNum = 0; //还剩多少张?50张!!! private static Integer lastedNum = 50; //注意此处方法为最最最最普通的方法---卖票 public void sale() { //卖之前...

披甲上战场的博客 575

Skill的嵌套

Skill的嵌套就很简单,直接引用其他的Skill就好了。在一个 Skill 的 SKILL.md 中,可以明确指示 Claude 去读取另一个 Skill 的文档。

Criss@陈磊 956

CKAD-CN考试之路----12

显然,对应的value都已经实现了加密.保存退出,等待pod重新创建。确认secret是否被加密。编辑secret文件。

Q先生 446

【多线程高并发编程】一进程和线程(并发和并行)

了解并发和并行,进程和线程的一些概念,更好的学习多线程编程

程序猿学社的博客 6870

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

爬虫-通过几个例子来说明并发以及多线程

什么是并发?并发,在中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个上运行,但任一个时刻点上只有一个程序在处理机上运行。嗯,字认识,但是连在一起就有点够呛,哈哈,开个玩笑。

weixin_33631777的博客 2044

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

并发,并行,异步,多线程

例子一 你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。 你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。 (不一定是同时的) 你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。 例子二 并发是两个队列,使用一台咖啡机,并行是两个队列,使用两台咖啡机。如果串行,一个队列使用一台咖啡机,那么哪怕前面那个人便秘了去...

憧憬的专栏 3228

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java CountDownLatch 模拟多并发线程简单例子

CountDownLatch作用  CountDownLatch,是一个倒计数的锁存器,当计数减至0时触发特定的事件。 构造方法参数指定了计数的次数 countDown方法,当前线程调用此方法,则计数减一 awaint方法,调用此方法会一直阻塞当前线程,直到计时器的值为0 测试线程类 import java.util.concurrent.Count

linzhijia0612的专栏 4620

python 多进程并发与多线程并发总结

本文对python支持的几种并发方式——多进程并发与多线程并发进行简单的总结。

cskchenshengkun的博客 3万+

C# 线程并发

我也想过跳过C#高级知识点概要直接讲MVC,但经过前思后想,还是觉得有必要讲的。我希望通过自己的经验给大家一些指引,带着大家一起走上ASP.NET MVC大牛之路,少走弯路。同时也希望能和大家一起交流,这样也能发现我自己的不足,对我自己的帮助也是非常大的。 建议大家对C#撑握的不错的时候,可以去看一些开源项目。走技术这条路,就要耐得住寂寞(群里双休日说要让群主找妹子进群的人必须反思),练好内功。不撑握C#高级知识点,别想看懂优秀的开源项目,更别指望吸收其编程思想;你的水平,随时可以被一个实习生代替!切记不

huiguoyuan的博客 1417

python的线程是并发还是并行_python 并发和线程

并发和线程基本概念 - 并行、并发并行, parallel互不干扰的在同一时刻做多件事;如,同一时刻,同时有多辆车在多条车道上跑,即同时发生的概念.并发, concurrency同时做某些事,但是强调同一时段做多件事.如,同一路口,发生了车辆要同时通过路面的事件.队列,缓冲区类似排队,是一种天然解决并发的办法.排队区域就是缓冲区.解决并发:【 "食堂打饭模型", 中午12点,大家都涌向食堂,就是并...

weixin_39631951的博客 283

QT-线程并发、QTcpServer并发、QThreadPool线程池

1.线程并发 一个程序内部能拥有多个线程并行执行。一个线程的执行可以被认为是一个CPU在执行该程序。当一个程序运行在多线程下,就好像有多个CPU在同时执行该程序。总之,多线程即可以这么理解:多线程是处理高并发的一种编程方法,即并发需要用多线程实现。 2.如何分配线程数量 利用 CPU 核心数,应用并发编程来提高效率.线程IO时间所占比例越高,需要越多线程;线程CPU时间所占比例越高,需要越少线程。理论上: 线程数量 = CPU 核数(逻辑)+ 1 为什么+1,《Java并发编程实战》这么说: 计算(C

我不是码农的博客~~~ 1057

Java并发01:进程、线程、并发、并行、多线程、线程安全、死锁、并发优缺点

[超级链接:Java并发学习系列-绪论] 本章主要对Java并发(Concurrent)相关的概念进行说明。 1.进程(Process)与线程(Thread) 进程是系统资源分配的最小单元。线程是CPU调度的最小单元。 一个 进程至少包含一个线程,可以包含多个线程。这些线程共享这个进程的资源。 每个线程都拥有独立的运行栈和程序计数器,线程切换开销小。 多进程指的是操作系统同时运行多个程...

韩超的博客 (hanchao5272) 3347
上一篇: 漫谈C++ Builder多线程编程技术
下一篇: 线程分析---引用(Dephi)
Devillyd
博客等级 码龄23年 58粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值