void quit ()
相当于exit(0)。
void exit ( int returnCode = 0 )
调用exit后,thread将退出event loop,并从exec返回,exec的返回值就是returnCode。
通常returnCode=0表示成功,其他值表示失败。
void terminate ()
结束线程,线察歼程是否立即终止取决于 *** 作系统。
线程被终止时,所有等待该线程Finished的线程都将被唤醒。
terminate是否调用取决于setTerminationEnabled ( bool enabled = true )开关。
其中quit与terminate是槽,可以直接用信号连接关闭线程,不过一般不建议使用terminate,还有想关闭线程,最好像下面例子帆禅;
直接调用stop接口就行了,线程就会关闭
class Thread : public QThread
{
Q_OBJECT
public:
Thread()
void setMessage(const QString &message)
void stop()
protected:
void run()
private:
QString messageStr
volatile bool stopped
}
Thread::Thread()
{
stopped = false
}
void Thread::run()
{
while (!stopped)
std::cerr <<qPrintable(messageStr)
stopped = false
std::cerr <<std::endl
}
void Thread::stop()
{
stopped = true
}
主界面有两个按钮,点击“开始”按钮,触发一个信号,然后子线程打印一条信息,点击“结束”按钮,关闭线程
线程相关类定义如下
线程类变量定义如下
线程启动、信号槽及实现如下。在构造函数中通过thread.start()启动线程。
运行程序,并查看程序输出。点击一下“开始”按钮,会触发线程打印一条日志,再点击一下“开始”按钮,线程再次打印一条日志。点击“结束”按钮,打印线程乱搜结束。这时再点击“开始”按钮,线程将不再打印日志
修改线程打印函数为一个for循环,并在每次循环后sleep(5)秒
运行程序,然后点击“开始”按钮,线程开始打印日志。打印一两条后点击“结束”按森握钮,程序并没有停止打印日此陪庆志,而是等到for循环结束后,才打印线程结束的日志。这说明线程并没有结束
修改线程结束函数如下,使用terminal函数。再次执行相同的步骤。
线程可以正常退出,但是程序关闭时崩溃。
修改线程打印函数,增加flag标识,在线程退出时,修改该flag标识,达到for循环退出的效果。这样线程可以正常退出,而且程序关闭时也不会崩溃
bunfly.resolve() 返回的函数指针fp不一定有效,闭行检查一下是否为0另外,name_line和menu_line应该是ui的成员仿颂,前面应该加ui->才对,你编译时没有错误吗,有点轿大哗疑惑
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)