c++ - 如何在 C++ 中运行具有仅调用线程的函数的类的多个对象?
问题描述
我有一个名为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){};
}
解决方案
为了在主程序的线程中运行类函数,我只是为它们中的每一个使用了一个函数,第二个函数返回一个线程,该线程在 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;
}
- 你可以在一个类中定义多个函数,并为每个函数创建一个线程返回函数,你可以用类的同一个对象调用它们。
推荐阅读
- computer-vision - .SMOTE 库问题
- visual-studio - 我不能在编辑器区域打开更多 3 个文件
- sql - SQL Inner join 如何只显示一次组合
- python - 创建数据透视表时出现关键错误
- php - 使用选项数组在 php 7.4 版中未设置 Cookie?
- c++ - for (int i = 2; i < n; i = i*i) 的时间复杂度是多少?
- python - 如何单击 recaptchaV2 的使用 Selenium 和 Python 解决挑战按钮
- python - 尽管没有错误和警告,但 Kivy 应用程序中出现黑屏
- javascript - 基于带有另一个数据框的绘图图表的点击事件的子数据框
- xamarin.forms - Xamarin.Forms 可绑定属性