0

我有一个 QTablewView,它将数据存储为一个列表,该列表是模型的后端数据。

self.shots=[{'name':'abc010','taskdir','/show/abc/abc010','file':'xxx.ma'},
             {'name':'abc020','taskdir','/show/abc/abc020','file':'yyy.ma'},
              ...    ]

属性来自 3 个单独的name, taskdir,fileQThread,当我按下一个按钮时,会创建 3 个线程,它们会为我的 self.shots 列表的第一个元素获取结果,它们一个接一个地运行,然后我第二次按下按钮,另一个3 个线程返回列表中的第二个元素(字典)。等等。

所以基本上我的问题是在这种情况下我需要使用读写锁吗?我的线程正在写入同一个列表,(因为当前 3 个线程仍在运行时,我可能会再次按下按钮。)

目前我在不使用任何读写锁的情况下随机出现段错误。这是崩溃的原因吗?

谢谢,如果有人能给我一个关于如何使用读写锁的伪代码。

我正在使用这个通用线程函数来创建我的线程。

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)
4

1 回答 1

0

您能否提供更多代码,因为我不清楚线程如何通信。

一些备注:

  • 您应该将数据存储在模型中,而不是视图中。这就是使用模型/视图设计的全部意义所在,它消除了数据一致性问题,并使同一模型的多个视图成为可能。Qt 模型/视图教程

  • 您不应该继承 QThread,而是使用moveToThread(QThread*)将具有所需功能的对象移动到线程。如何真正、真正地使用 QThreads

于 2013-08-14T12:47:18.350 回答