c++builder 动态创建10个线程,线程并行运行,10个线程的开启、结束用一个按钮管理,10个线程分别做不同的工作,10个线程的结果在主界面显示的实例代码及详细注释
时间: 2024-12-03 08:06:00 浏览: 23
在C++Builder中,你可以使用`TThread`类以及VCL组件来实现这样的功能。以下是一个简单的示例代码,它创建了10个线程,每个线程代表一个任务,并通过按钮控制线程的启动和停止。请注意,这只是一个基础示例,实际应用可能需要更复杂的错误处理和UI交互。
```cpp
// 引入必要的头文件
#include <System.Classes.hpp>
#include <System.Threading.hpp>
// 创建一个自定义的线程类,用于封装线程的工作
class WorkerThread : public TThread {
public:
WorkerThread(const String& taskName) : TaskName(taskName) {}
protected:
// 线程的执行体
virtual void Execute() override {
try {
// 这里是你想让线程执行的具体任务
// 比如计算、网络请求等,这里仅作示例,可以替换为实际业务逻辑
for (int i = 0; i < 10; ++i) {
int result = PerformTask(TaskName + " - " + IntToStr(i));
// 将结果添加到共享数据结构或发布事件通知主线程更新 UI
// 主线程将从事件处理中获取这些结果
MainForm.AddResult(TaskName, result);
}
} catch (Exception &e) {
MainForm.ShowMessage("Error in worker thread: " + e.Message);
}
}
private:
String TaskName;
// 自定义的执行任务函数
virtual int PerformTask(const String& taskDesc) = 0;
};
// 实现 PerformTask 函数供子线程使用
class ThreadOne : public WorkerThread {
public:
ThreadOne(const String& name) : WorkerThread(name) {}
int PerformTask(const String& desc) override { return desc.Length(); }
};
// ... 类似地为其他9个线程定义
// 主窗口类
class TForm1 : public TForm {
private:
// 定义全局变量存储线程列表
TArray<WorkerThread*> Threads;
public:
// 其他UI组件...
void ButtonStartClick(TObject* Sender) {
for (int i = 0; i < 10; ++i) {
// 创建并启动线程
ThreadOne* thread = new ThreadOne(L"Thread_" + IntToStr(i));
thread->Start();
Threads.Add(thread); // 添加到线程列表
}
}
void ButtonStopClick(TObject* Sender) {
for (auto& thread : Threads) {
if (thread->IsRunning()) {
thread->Terminate(); // 停止所有正在运行的线程
}
delete thread; // 删除已终止的线程
}
Threads.Clear(); // 清空线程列表
}
// 更新 UI 的方法
void AddResult(const String& taskName, int result) {
// 这里假设有一个列表框或动态数组来展示结果
ListBoxResults.Items.Add的任务Name + ": " + IntToStr(result));
}
};
//---------------------------------------------------------------------------
// 主程序入口点
//---------------------------------------------------------------------------
int main()
{
try {
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception) {
Application->ShowException(&exception);
return 1;
}
}
```
阅读全文