在运行过程中删除Qthread

时间:2018-03-02 07:23:39

标签: multithreading qt qt5 qthread

我创建了一个带有A类的线程,在删除了A类之后,该线程未被删除。它继续运行。

我明确地调用了线程析构函数,退出并退出函数但仍然没有停止运行。

是否有类似KILL函数来停止执行线程

var Data: [String] = ["First","Second","Third"]

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if self.Data.count > 0{
        return self.Data.count
    }
    return 0
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! ViewCell

    cell.Lbl.text = self.aData[indexPath.row]

    return cell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let cell = tableView.cellForRow(at: indexPath) as! suggestionCell
    cell.suggestionImg.image = UIImage(named: "tick")


}

1 个答案:

答案 0 :(得分:1)

来自文档:

  

请注意,删除QThread对象不会停止执行它管理的线程。删除正在运行的QThread(即isFinished()返回false)将导致程序崩溃。在删除QThread之前等待finished()信号。

您永远不应删除正在运行的QThread对象。

所以我认为你最好在WorkerThread中编写一些终止/退出逻辑,例如quit公开一些插槽并将信号连接到这个quit插槽。

如果您只是想终止线程,无论如何,只需连接已销毁的SIGNAL以终止SLOT(http://doc.qt.io/qt-5/qthread.html#terminate

因此,假设您的A类派生自QObject,您将在此类中做什么:

connect(this, SIGNAL(destroyed()), Thread, terminate());

如果您有自己的广告位quit公开,那么请确保正确停止在循环中执行的所有内容terminate()使用quit()

connect(this, SIGNAL(destroyed()), Thread, quit());

以下是实施此类逻辑的示例:http://blog.debao.me/2013/08/how-to-use-qthread-in-the-right-way-part-1/

或者只是将quit = true放在ThreadWorker析构函数中。

应该是直截了当的。祝你好运!

还有一些带有示例的官方文档(imo做得对):

https://wiki.qt.io/QThreads_general_usage

https://doc.qt.io/archives/qt-5.8/qtnetwork-blockingfortuneclient-example.html

https://doc.qt.io/archives/qt-5.8/qtcore-threads-mandelbrot-example.html