我有一个QTablewView,它将数据存储为List,列表是模型的后端数据。
self.shots=[{'name':'abc010','taskdir','/show/abc/abc010','file':'xxx.ma'},
{'name':'abc020','taskdir','/show/abc/abc020','file':'yyy.ma'},
... ]
name, taskdir,file
属性来自3个单独的QThread,当我按下一个按钮时,创建了3个线程并且他们获得了我的self.shots列表的第一个元素的结果,它们一个接一个地运行,然后我第二次点击按钮,另外3个线程返回列表中的第二个元素(字典)。等等。
基本上我的问题是在这种情况下我需要使用读写锁吗?我的帖子正在写入同一个列表,(因为我可能会在第3个主题仍在运行时再次按下该按钮。)
目前我在不使用任何readwritelocks的情况下随机获得段错误。这是崩溃的原因吗?
感谢任何人都可以给我一个关于如何使用读写锁的伪代码。
我正在使用这个通用线程函数来创建我的线程。
class GenericThread(QThread):
def __init__(self, function, *args, **kwargs):
QThread.__init__(self)
# super(GenericThread, self).__init__()
self.function = function
self.args = args
self.kwargs = kwargs
def __del__(self):
self.wait()
def run(self, *args):
self.function(*self.args, **self.kwargs)
答案 0 :(得分:0)
你能提供更多代码,因为我不清楚线程是如何通信的。
一些评论:
您应该将数据存储在模型中,而不是存储在视图中。这就是使用模型/视图设计的重点,它消除了数据一致性问题,并使得可以拥有相同模型的多个视图。 Qt Model/View Tutorial
您不应该继承QThread,而应使用 moveToThread(QThread *)将具有所需功能的对象移动到该线程。 How To Really, Truly Use QThreads