PyQt5 是单独线程中的 QTimer 运行 并且它是否阻塞?
PyQt5 is QTimer running in separate thread and is it blocking?
我有一个使用数据库的应用程序。我想设置一个计时器来启动一个函数,该函数将定期修改数据库。但是我想确保它是阻塞的,所以在这个函数完成之前不会对 db 进行读写操作。
我的 QTimer 在 GUI 线程中,据我所知,它的插槽会阻塞主线程。我说的对吗?
class AppLauncher(QtWidgets.QMainWindow, AppWindow.Ui_MainWindow):
def __init__(self, parent=None):
super(AppLauncher, self).__init__(parent)
self.setupUi(self)
flags = QtCore.Qt.WindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)
self.setWindowFlags(flags)
self.setWindowState(QtCore.Qt.WindowFullScreen)
self.fooTimer = QTimer(self)
self.fooTimer.timeout.connect(self.foo)
def foo(self):
pass
def main():
app = QApplication(sys.argv)
form = AppLauncher()
form.show()
app.exec_()
if __name__ == '__main__':
main()
QTimer 总是 运行 在它创建和启动的线程中,但这并不重要,因为它不会改变 timeout
连接函数的结果行为,即使它在另一个线程中执行。
始终重要的是 slot/function 所在的线程,只要 foo
是一个实例的成员,该实例位于您想要的任何其他函数的同一线程中”块”,它将按预期工作,阻止执行任何其他操作,直到 returns。
我有一个使用数据库的应用程序。我想设置一个计时器来启动一个函数,该函数将定期修改数据库。但是我想确保它是阻塞的,所以在这个函数完成之前不会对 db 进行读写操作。
我的 QTimer 在 GUI 线程中,据我所知,它的插槽会阻塞主线程。我说的对吗?
class AppLauncher(QtWidgets.QMainWindow, AppWindow.Ui_MainWindow):
def __init__(self, parent=None):
super(AppLauncher, self).__init__(parent)
self.setupUi(self)
flags = QtCore.Qt.WindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)
self.setWindowFlags(flags)
self.setWindowState(QtCore.Qt.WindowFullScreen)
self.fooTimer = QTimer(self)
self.fooTimer.timeout.connect(self.foo)
def foo(self):
pass
def main():
app = QApplication(sys.argv)
form = AppLauncher()
form.show()
app.exec_()
if __name__ == '__main__':
main()
QTimer 总是 运行 在它创建和启动的线程中,但这并不重要,因为它不会改变 timeout
连接函数的结果行为,即使它在另一个线程中执行。
始终重要的是 slot/function 所在的线程,只要 foo
是一个实例的成员,该实例位于您想要的任何其他函数的同一线程中”块”,它将按预期工作,阻止执行任何其他操作,直到 returns。