需求是这样的,在主窗口类Widget中启动一个子线程去执行录音操作,然后使用共享的静态变量来结束录音,在Widget类中发出停止命令,MyThread类则停止录音操作,
status定义:
class MyThread : public QObject
{
Q_OBJECT
public:
explicit MyThread(QObject *parent = nullptr);
AVFormatContext* open_media(); //打开音频设备
static int status;//用于控制录制
只截了一部分代码,status是定义在MyThread类中的一个静态成员变量,在里面不能进行初始化如:
static int status = 0;//用于控制录制
编译器会报错:可以自己尝试一下。
在使用静态变量之前必须进行初始化,如果不进行初始化的话就会报错:
就像这样的错误,那么初始化在哪里呢?我是直接在main函数前面进行初始化的:
#include "widget.h"
#include <QApplication>
int MyThread::status = 0;//初始化状态变量
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
在其他文件中如果要使用MyThread里面的静态成员变量status,必须包含相应的头文件,使用方式MyThead::status = 1;这样可以访问共享变量了
大概就是这样