【发布时间】:2015-12-20 15:14:35
【问题描述】:
我想在我的表单中添加一个按钮,如果用户希望出于任何原因停止进程或加载另一个文件,可以使用该按钮终止正在运行的进程(循环运行数千次)。
该程序有一个部分对多个案例执行插值,并为每个案例创建并保存一个文本文件。一旦进程启动(通过在加载必要的文件后按下按钮来完成),它就会开始运行并且在完成之前无法停止。此过程的持续时间可能在几分钟到几小时之间,具体取决于某些文件的大小。
我从按下按钮时调用的部分复制了一个代码 sn-p(更改了名称和某些部分,并省略了第一个 if 块后面的内容,因为它在这里无关紧要)。
void __fastcall TMapperForm::bt_InterpolationClick(TObject *Sender)
{
int i;
if(someflagused == true)
{
different_cases_total = 0;
for(i=0; i<something_counter; i++)
{
CleanStuff();
FunctionReadingFiles(list_of_stuff->Items->Strings[i]);
InterpolatingFunction();
different_cases_total+= no_cases;
}
}
}
如上所述,我想创建另一个可以终止/终止进程的按钮。我的主要问题是,当程序运行时,它会死机,我看不到中断循环的方法。
有没有什么方法可以添加一个按钮,即使在循环运行时也保持活动状态并且可以在单击时终止进程?
【问题讨论】:
-
要让用户界面在您执行某些其他操作时仍然处于活动状态,您必须使用线程,或者在循环中发送 Windows 消息。如果您决定使用线程,请在线程中启动密集进程,并让主线程处理用户界面。
-
@M.M 是的,我预感到这与线程有关。我的编程知识相当有限,我最近学习了 C++、VCL 和 BCB 的基础知识,以便能够从事这个项目。我会调查一下,谢谢。您能否添加任何特定于您的建议、伪代码或指向显示多线程和终止进程的示例的链接?这是我必须做的(使用带有按钮的停止或终止部分)吗?:C++ Builder Multithreading,
-
Remy 将随时提供一些示例代码。那篇文章真的很老了。您应该提及您使用的是哪个版本的 C++Builder。
-
(Remy Lebau?哈哈哈,我喜欢这个社区,他之前评论过我之前的BCB相关问题。)我正在使用BCB 4.0。我正在进行的项目需要我更改 10-15 年前编写的工具的一些功能,因此是旧版本。
-
如果
InterpolatingFunction();消失并且很长时间没有回来,那么消息处理解决方案将不起作用
标签: c++ c++builder vcl borland-c++