Delphi安全结束线程

从其它平台迁移而来 在开发过程中,不可避免的要用到多线程,而线程的同步、释放等又可能引入新的问题,不过网上已有许多资料,这里重点说下我使用的方法。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 type TMyThread = class(TThread) protected procedure Execute; override; public constructor Create(...); destructor Destroy; override; //使用 reintroduce 关键字可以明确通知编译器屏蔽父类的同名方法而使用自己的方法。 procedure Free; reintroduce; end; constructor TMyThread.Create(...); begin { 在这里创建相关对象,可以省去先挂起线程再恢复的操作 } inherited Create; end; destructor TMyThread....

2019-04-28 19:13:48 · 1 分钟 · 慢步道人

多线程、多进程、多核

从其它平台迁移而来 前言 线程、进程的概念实际上已经纠结N久了,不过好在多少有些了解了,但总感觉还不是那么通透。 碰巧晚饭时与室友争论了一个问题,与线程的问题很类同,为了能通俗易懂的给室友讲明白,着实消耗了不少脑细胞。所幸最终他表示明白了(至于是真是假便不清楚了,不过至少我自己感觉通透了许多)。 鉴于抱着一颗开源共享的心,便稍加整理,拿来浪一下啦! CPU 其实,CPU是个很笨的家伙,笨到只会做最简单的事,而且一次还只能做一件最简单的事,而它能做的所有的事掰着指头数来数去也就那么几件。多了、复杂了,抱歉,不会! CPU仅会做的那几件事呢,就叫做CPU指令。 虽然CPU这家伙很笨,但还是有优点的,而且这优点还很让人喜欢。什么优点呢?快!准! 时间片 虽然CPU只会那么几个指令,但是已经够了,因为那些复杂的事都可以用这些指令进行排列组合来完成。所以啊,CPU一点儿也不怕麻烦。 由于CPU干活又快又准,所以很多事都可以让他来做。但是CPU这小子实在是太傻愣傻愣了,为了防止这傻小子闷着头只顾做手头上的事,把其它事都抛到了脑后,就有个头脑还算灵光的家伙跑来指挥CPU,这个家伙就是操作系统(更准确的说是分时操作系统),也叫OS。 OS规定CPU做一件事只能用一小段时间(这一小段时间就叫时间片),而且时间到了必须放下手头的事,去做下一件事,不管手头上的事有没有做完。事实上OS把每一件事的进度都记录了下来,下次轮到这件事时就让CPU接着原来的进度继续干下去。 由于CPU干活实在是太快太快了,所以感觉就像同时在做所有安排给他的事。 进程&线程 不管是进程还是线程,其实都是任务。任务也分大小的,一个大任务可以包含若干小任务,而且一个大任务至少要有一个小任务。一个大任务就是一个进程,一个小任务就是一个线程。 把这些任务交给OS,OS就根据情况做规划,给每个任务分配合理的时间片,然后安排CPU来完成。 单线程&多线程 一个大任务只有一个小任务,那这个大任务就叫做单线程,否则就叫多线程。 举个栗子: 小明在唱歌,而且在唱歌是其它的事都不做。这就是单线程。 小明一边唱歌,一边跳舞。这就是多线程。 小明一边唱歌,一边吃饭。这也是多线程,只不过这两个小任务都用到了嘴巴,所以执行起来就会麻烦很多,解决麻烦的办法就是线程同步。 多进程 直接举栗子: 小明自己放风筝。这就是单进程。 小明和小红都在放自己的风筝。这是一种多进程,只不过两个进程是独立的。 小明和小红一起放大蜈蚣风筝。这是另一种多进程,进程之间需要配合,也存在类似多线程的麻烦。这方面的问题没有详细了解过,就不多扯了。 多线程&多进程 再次举栗子: 小明一边唱歌,一边跳舞。这是多线程,用的都是小明的身体(资源)。 小明唱歌,小红跳舞。这是多进程,各自用各自的身体(资源)。 小明和小红合唱。这也是多进程,各自用各自的身体(资源)。 多核 单核、多核是针对CPU来说的。 继续举栗子说明: 普通人。单核。 哪吒。多核。 如有不对之处,还望大侠指正!

2018-04-13 22:53:06 · 1 分钟 · 慢步道人