Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 14, 2011 01:05:48

Alex_Kutsan
От:
Зарегистрирован: 2010-03-25
Сообщения: 150
Репутация: +  0  -
Профиль   Отправить e-mail  

threading Lock не работает

Была програмка без потоков, (точнее без потоков которые хотят изменять графический оинтерфейс) всё было ОК. ну добавил поток.

		print("send_post_by_direct ",user.name,post.data)
try:
T = threading.Thread(None,user.get_Post,name = '%s_send_post_by_direct'%self.name,args=(self,post))
T.start()
except:
print("error Threading send_post_by_direct")
соль в том что get_Post в самом своём сердце таки вызывает изменения в интерфейсе
если точно то в этом месте
...
code = "A.form.Screen_User_%i.appendPlainText('|%s(far) was deleted|')"%(index,params[1].name)
...
Lock.acquire()
try:
print("befor exec")

exec(code)
print("exec WOCKS")


except:
print("error exec(LOG): "+ code)
Lock.release()
слато выдавать ошибку
QObject::connect: Cannot queue arguments of type ‘QTextCursor’
(Make sure ‘QTextCursor’ is registered using qRegisterMetaType().)

время от времени выдаёт время от времени нет. А иногда вообще вылетает с таким-же сообщением только ещё с ошибкой сегментирования в придачу. Вроде бы Нити не должны иметь доступ к изменению интерфейса когда он занят, но нет, имеют. уже не усомнился(маловырный) в threading.Lock сделал свой Lock.
class Lock():
def __init__(self):
self.locked = False
def lock(self):
self.locked = True
def unlock(self):
self.locked = False
перд изменение интерфейса вставлял
while L.locked:
pass
L.lock()
...
L.unlock()
но, по барабану, результат одинаков.



Офлайн

#2 Авг. 14, 2011 02:45:06

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

threading Lock не работает

Нельзя менять интерфейс из потока. Следует посылать сообщение.



Офлайн

#3 Авг. 14, 2011 08:49:26

Alex_Kutsan
От:
Зарегистрирован: 2010-03-25
Сообщения: 150
Репутация: +  0  -
Профиль   Отправить e-mail  

threading Lock не работает

Ага, тоесть получается нужно сгенерировать сигнал и поймать его в классе . Как сгененрировать сигнал? с параметрами?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version