【问题标题】:How to run multiple objects of a class having a function calling only threads in C++?如何在 C++ 中运行具有仅调用线程的函数的类的多个对象?
【发布时间】:2020-06-11 09:27:14
【问题描述】:

我有一个名为 WiFiControlImplementation 的子类,它是另一个名为 WifiSniffer

的类的子类

WiFiControlImplementation 包含一个公共方法:

class WiFiControlImplementation : public WifiSniffer {
    public:
       WiFiControlImplementation(){};
       void startControlProcess (void);
    private:
       bool callback            (void) override;

它从 WifiSniffer 继承了两个函数:

class WifiSniffer{
    public:
       WifiSniffer(){};
       void  run                (void);
       void  runChannelHop      (int hopscale);
    private:
       virtual bool callback         (void);

函数 startControlProcess 必须在不同的线程中运行两个继承的函数:

void WiFiControlImplementation::startControlProcess(){
   std::thread channelhop  (&WiFiControlImplementation::runChannelHop,this,3);
   std::thread runner      (&WiFiControlImplementation::run,this);
}

现在如果我想在另一个主文件(例如:main.cpp)中运行对象怎么办? 我这样做吗:

   #include "wifi_ControlImplementation.h"
   int main(int argc, char **argv){
      WiFiControlImplementation job;
      job.startControlProcess();
      while(1){}; // For not stopping the main thread so that the object thread can still run ?
   }

如果我想像这样运行同一个类的多个对象,我应该怎么做:

   #include "wifi_ControlImplementation.h"
   int main(int argc, char **argv){
      WiFiControlImplementation job;
      job.startControlProcess();

      WiFiControlImplementation job2;
      job2.startControlProcess();

      WiFiControlImplementation job3;
      job3.startControlProcess();
      while(1){};
   }

【问题讨论】:

  • 嗨serialback,欢迎来到StackOverflow!您是否尝试过运行您发布的代码?如果是这样,会发生什么?
  • while(1){}; 不,你不应该那样做。这是什么意思?
  • 当我在没有 while(1) 的情况下运行程序时,程序退出时终止“在没有活动异常中止的情况下调用”问题,因为主函数正在调用一个对象,该对象的函数只运行线程,所以主程序只是运行线程并退出,如果主程序退出,线程将被杀死,对吗?我应该如何解决它

标签: c++ multithreading c++11


【解决方案1】:

为了在主程序的线程中运行类函数,我只是为它们中的每一个使用了一个函数,第二个函数返回一个线程,该线程在 lambda 调用中执行第一个函数,下面是示例:

  • wifi_Hopper.h 中:
#include <thread>
class wifi_Hopper {
     public:
        wifi_Hopper(){};
        std::thread start_thread(void) {
            return std::thread( [=] { start_hopping(); } );
        }
     private:
        void start_hopping(void);
}
  • ma​​in.cpp 中:
#include "wifi_Hopper.h"
int main(int argc, char **argv){
   wifi_Hopper wH;
   std::thread HopperThread = wH.start_thread();
   HopperThread.join();
   return 0;
}
  • 您可以在一个类中定义多个函数,并为每个函数创建一个线程返回函数,您可以使用该类的同一个对象调用所有这些函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-27
    • 2017-03-23
    • 1970-01-01
    相关资源
    最近更新 更多