gpt4 book ai didi

c++ - Qt : restarting thread

转载 作者:行者123 更新时间:2023-11-28 03:26:31 24 4
gpt4 key购买 nike

我正在使用 Qt 开发 GUI,我在使用线程时遇到了问题。我创建了一个带有两个按钮流和停止流的小型 GUI。我的问题是停止后无法重新启动流:以下是部分代码:

MainThread::MainThread(QWidget *parent):QWidget(parent){

bstream = new QPushButton("&stream");
bstopstream = new QPushButton("STOP stream");
bcapture = new QPushButton("capture a frame");
Allbox = new QVBoxLayout(this);
Allbox->addWidget(bstream);
Allbox->addWidget(bcapture);
Allbox->addWidget(bstopstream);

connect(bstream,SIGNAL(clicked()),this, SLOT(startingstream()));
connect(bcapture,SIGNAL(clicked()),this, SLOT(captureAFrame()));
connect(bstopstream,SIGNAL(clicked()),this, SLOT(stopstreaming()));

setLayout(Allbox);

}

void MainThread::stopstreaming(){
cv::destroyAllWindows();

stream.terminate();
stream.wait();
stream.~Streaming();
}

void MainThread::startingstream(){

if(stream.isRunning()) return;
stream.start();

}

最佳答案

stream.~Streaming();

这会调用您的 stream 对象的析构函数。你不应该手动调用它,正式地说,对象在那之后就死了,在那之后它可能表现得“有趣”。

例如,假设一个对象是这样的:

void stream::play() {
buff_->start();
}

void stream::~stream() {
delete buff_;
}

然后行 buff_->start() 可能会做一些奇怪的事情,本质上会产生未定义的行为。

或者如果它是这样写的(尽管你永远不需要在析构函数中手动将某些东西设置为零;如前所述,该对象应该在析构后死亡):

void stream::play() {
if (buff_) buff_->start();
}

void stream::~stream() {
delete buff_;
buff_ = 0;
}

那么它可能什么都不做。

关于c++ - Qt : restarting thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13764821/

24 4 0
文章推荐: javascript - EaselJS - 更改线条的透明度
文章推荐: html - 自定义注册表单不起作用
文章推荐: html - 将