如何在 C++ 中运行具有仅调用线程的函数的类的多个对象?
Posted
技术标签:
【中文标题】如何在 C++ 中运行具有仅调用线程的函数的类的多个对象?【英文标题】:How to run multiple objects of a class having a function calling only threads in 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,欢迎来到***!您是否尝试过运行您发布的代码?如果是这样,会发生什么?while(1);
不,你不应该那样做。这是什么意思?
当我在没有 while(1) 的情况下运行程序时,程序退出时终止“在没有活动异常中止的情况下调用”问题,因为主函数正在调用一个对象,该对象的函数只运行线程,所以主程序只是运行线程并退出,如果主程序退出,线程将被杀死,对吗?我应该如何解决它
【参考方案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);
在 main.cpp 中:
#include "wifi_Hopper.h"
int main(int argc, char **argv)
wifi_Hopper wH;
std::thread HopperThread = wH.start_thread();
HopperThread.join();
return 0;
您可以在一个类中定义多个函数,并为每个函数创建一个线程返回函数,您可以使用该类的同一个对象调用所有这些函数。
【讨论】:
以上是关于如何在 C++ 中运行具有仅调用线程的函数的类的多个对象?的主要内容,如果未能解决你的问题,请参考以下文章
c++ 当我创建结构数组时,如何使用结构数组内的类的参数调用构造函数?