1.现成的组件不一定线程安全,(包括且不限于数据的修改竞争,和一些组件的崩溃 )
对于PyQt 的线程使用,可能还需要更谨慎些
保存逻辑
@QuestionBox("保存/Save")
def Save(self):
okFlag=False
errFlag=False
WriteCmd={}
for it in self.ModelList():
WriteCmd.clear()
WriteCmd={}
try:
if self.__trans__.__HTTP_EN__:
WriteCmd={"cmd":"write",**it[0].checkWrite()}
if len(WriteCmd) == 1:
continue
self.__trans__.cmd(WriteCmd)
it[0].clearCheckWrite()
self.DevLog(f"{WriteCmd} Successful")
except (HttpError,urllib.error.URLError) as e:
QMessageBox.critical(self,"保存失败/Failed","执行失败/Failed %s"%(e.args[0]))
self.DevLog(f"{WriteCmd} Failed")
it[0].clearCheckWrite()
return False
if it[0].submitAll():
okFlag=True
else:
errFlag=True
return okFlag and not errFlag
完全可控的情况下,可以使用多线程 (组件之间的多线程,建议通过信号触发)
没有崩溃的情况
win10 64 位系统可以平稳运行