我创建了一个带有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")
}
答案 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