Application->ProcessMessages();

本文介绍了Application.ProcessMessages的作用及使用场景,特别强调了其在循环中防止程序无响应的重要性。通过实例说明如何在长时间运行的任务中加入该方法,使得程序能够响应用户中断请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Application.ProcessMessages的用法意义

   在循环中加Application.ProcessMessages是可以防止其他控件没响应,举个例子容易明白:假如你的窗体上有两个按钮,一个“计算”,一个“停止”,如果你的计算是密集运算或复杂处理,当你点了“计算”钮后,你将发现“停止”按钮不会响应你的点击了,

   也就是说,你无法随时使计算过程停下来。而倘若你在计算的代码中加入Application.ProcessMessages,则你的程序就有机会响应其它的事件了。

   在大量的循环运算,又不想使用多线程时,为了计算机在运算时能响应用户的操作,又不破坏指令执行.

Application.ProcessMessages 就是干这个的!

 

application.ProcessMessages的主要作用使程序在循环时能够相应外界事件。一般情况下,程序在循环的时候不响应外界事件。直到循环结束为止才能接受和响应外界事件。application.ProcessMessages可以有效的解决循环循环的独占问题,能够暂时中断应用程序的执行。比如,你要设计一个计算,这个计算需要循环10000次。当循环开始到500次的时候,用户突然不想计算下去了,它想取消这个计算,这时候你就可以设置一个cancel按钮,然后在循环体内部合适的位置application.ProcessMessages。来处理cancel按钮的信息,中断循环。如果你在循环体内没有application.ProcessMessages这句。当循环开始后,程序就被10000次的这个循环独占了,直到循环结束为止。在循环的期间,用户的按什么按钮都没有用。

 

转载于:https://www.cnblogs.com/azbane/p/7409925.html

if (const int nosorts_n = FStrs_Nosorts.Count()) { for (int i=0; i<nosorts_n; i++) { const int nosorts_i_n = FStrs_Nosorts[i].Count(); for (int j=0; j<nosorts_i_n; ++j) { bool same_krj = false; for (int k=0; k<FKeyRelations.Count(); ++k) { Application->ProcessMessages(); TKeyRelation &krj = FKeyRelations[k]; TStr &str = FStrs_Nosorts[i][j]; if (str.Length() > 0) { if (str == krj.key) { same_krj = true; TInt3sStk &krjr = krj.relations; const int n = krjr.Count(); bool same_krjr = false; for (int kk=0; kk<n; ++kk) { if (FStrs_Nosorts[i].e==krjr[kk].first && FStrs_Nosorts[i].i==krjr[kk].second) { same_krjr = true; //如果不同列但同行,算作同一次 bool samerow = false; for (int b=0; b<krj.rows[kk].Count(); ++b) { if (krj.rows[kk][b]==j) { samerow = true; break; } } if (!samerow) { krjr[kk].third++; krj.rows[kk].Insert(krj.rows[kk].Last()); krj.rows[kk][krj.rows[kk].Last()] = j; } else { krj.rows[kk].Insert(krj.rows[kk].Last()); krj.rows[kk][krj.rows[kk].Last()] = -1;//表示与上一个同一行 } krj.cols[kk].Insert(krj.cols[kk].Last()); krj.cols[kk][krj.cols[kk].Last()] = FStrs_Nosorts[i].col; break; } } if (!same_krjr) { TInt3 &krjr_new = krjr.Append(); krjr_new.first = FStrs_Nosorts[i].e; krjr_new.second = FStrs_Nosorts[i].i; krjr_new.third = 1; krj.rows.Append(); TInts &rows = krj.rows[krj.rows.Last()]; rows.Insert(rows.Last()); rows[rows.Last()] = j; krj.cols.Append(); TInts &cols = krj.cols[krj.cols.Last()]; cols.Insert(cols.Last()); cols[cols.Last()] = FStrs_Nosorts[i].col; } break; } } else same_krj = true; } if (!same_krj && FStrs_Nosorts[i][j].Length()>0) { FKeyRelations.Append(); TKeyRelation &krl = FKeyRelations[FKeyRelations.Last()]; krl.key = FStrs_Nosorts[i][j]; TInt3 &krjr_new = krl.relations.Append(); krjr_new.first = FStrs_Nosorts[i].e; krjr_new.second = FStrs_Nosorts[i].i; krjr_new.third = 1; krl.rows.Append(); TInts &rows = krl.rows[krl.rows.Last()]; rows.Insert(rows.Last()); rows[rows.Last()] = j; krl.cols.Append(); TInts &cols = krl.cols[krl.cols.Last()]; cols.Insert(cols.Last()); cols[cols.Last()] = FStrs_Nosorts[i].col; } } } }这是c++builder中的一段代码,能否优化一下运行效率?
最新发布
05-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值