对于我这种Delphi渣渣选手来说,整这么一个破玩意儿真不好搞,网上找半天示例还找不到一个纯净版的实现,找到好多示例实现起来的也各不一样,于是乎就有了这篇文章~~如果写过java的swing程序就很清楚,一个主线程为主程序,所有的*作在其基础上完成的,如果其中有一个*作需要等待延迟执行或者查询数据库耗时较长,我们的程序会出现(看似)卡死的情况,你不能再对其进行控制,直到它的当前*作已经被完成。就跟ajax的请求一样,把ajax的请求设置为同步时,浏览器一样会呈现卡住的情况,直到请求响应后才可以再*作其他,类似这种我们将ajax设置为异步即可。同样的CS端程序需要重新启动一个线程专门去干这件事情。
本示例主要有两个小点:
(1)点击普通按钮将进行10次循环,每次循环将休眠1秒,我们发现在程序执行的过程中,我们无法拖动窗口,无法将其关闭,无法选中文本域中的文本等等,必须要等到程序的10次休眠执行完毕才可以;
(2)点击多线程按钮同样进行10次循环,开启一个新的线程去执行逻辑,主线程不会受其影响,我们可以拖动窗口,关闭窗口,选择文本域中的内容等等;
详细参考如下:
参考代码
unit ThreadTest;
{
多线程的定义和调用
单线