一个线程执行完后,不删除它,再次执行怎样启动它?

 转自:http://topic.csdn.net/u/20110205/16/3a0d78a7-c6c8-4e80-83a6-fff863b39706.html

 

// 重复利用线程的办法,60个线程可节省5秒
void __fastcall Mthread::Execute()
{
  while (!Terminated)
  if (!finished) // 线程未完成
  {
  mac=GetMAC(ip); // 据IP取MAC地址
  if (mac=="")
  mac="/";
  MACs[no]=mac;
  finished=true; // 线程执行完
  Suspend(); // 暂停,可减少CPU负担
  }
}

 

线程调用的函数执行后,线程停止后,如何让此线程重新再次执行该函数

转自:http://topic.csdn.net/u/20090609/09/2da000e4-3ddb-44c4-a002-c52486e8f23a.html?1311206204

以下是一个简单的示例代码,演示如何在QT中按下按钮A来开启线程,并在再次按下按钮A时结束线程: ```c++ #include <QThread> #include <QPushButton> class MyThread : public QThread { public: void run() override { while (m_running) { // 执行循环命令 } } void stop() { m_running = false; } private: bool m_running = true; }; class MyWidget : public QWidget { public: MyWidget(QWidget *parent = nullptr) : QWidget(parent) { m_threadButton.setText("Start Thread"); connect(&m_threadButton, &QPushButton::clicked, this, &MyWidget::onThreadButtonClicked); QHBoxLayout *layout = new QHBoxLayout(this); layout->addWidget(&m_threadButton); setLayout(layout); } private slots: void onThreadButtonClicked() { if (!m_thread) { m_thread = new MyThread; m_threadButton.setText("Stop Thread"); m_thread->start(); } else { m_threadButton.setText("Start Thread"); m_thread->stop(); m_thread->wait(); delete m_thread; m_thread = nullptr; } } private: QPushButton m_threadButton; MyThread *m_thread = nullptr; }; ``` 在上面的代码中,我们创建了一个名为 `MyThread` 的子类,用于执行循环命令。该类重写了 `run()` 函数,并在其中使用了一个布尔变量 `m_running` 来控制循环的执行。我们还提供了一个名为 `stop()` 的函数,用于停止线程。 我们还创建了一个名为 `MyWidget` 的窗口部件,其中包含一个名为 `m_threadButton` 的按钮。我们将该按钮的 `clicked()` 信号连接到了名为 `onThreadButtonClicked()` 的槽函数上。在该槽函数中,我们检查线程是否已经启动,如果没有,我们创建一个新的 `MyThread` 对象并启动它。如果线程已经在运行,则我们停止线程并等待它结束,最后删除线程对象。 在 `MyThread` 类的 `run()` 函数中,我们不断地循环执行某些命令,直到 `m_running` 变量被设置为 false。在 `stop()` 函数中,我们简单地将 `m_running` 变量设置为 false。 这样,当用户按下按钮时,我们将创建一个新的线程并开始循环执行某些命令。当再次按下该按钮时,我们将停止线程并等待它结束
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值