LINUX.ORG.RU

Timers cannot be stopped from another thread

 


0

2

Всем привет, подскажите, как решить?

class Worker(QtCore.QThread):
    login_event = QtCore.pyqtSignal(int)
    running = False

    def __init__(self, parent=None):
        super(Worker, self).__init__(parent)
        self.running = True
    def run(self):
        wmi = Moniker('winmgmts:')
        wmi_events = wmi.ExecNotificationQuery("SELECT * FROM __InstanceCreationEvent WITHIN 5 WHERE TargetInstance ISA 'Win32_NTLogEvent' AND TargetInstance.EventCode = 4625")
        while self.running:
            received_event = wmi_events.NextEvent()
            event = received_event.TargetInstance.InsertionStrings
            remote_username = event[5]
            print("Username: " + remote_username)
    def stop(self):
        self.running = False

class MainWindow(Ui_MainWindow):
    def __init__(self, dialog, db):
        super().__init__()
        Ui_MainWindow.__init__(self)
        self.setupUi(dialog)
        self.tmr = Worker(self)
        self.tmr.start()
Traceback (most recent call last):
  File "run_me.py", line 22, in run
    wmi = Moniker('winmgmts:')
  File "C:\Python35-32\lib\site-packages\win32com\client\__init__.py", line 87, in Moniker
    moniker, i, bindCtx = pythoncom.MkParseDisplayName(Pathname)
pywintypes.com_error: (-2147221020, '?????????? ????', None, None)
QObject::~QObject: Timers cannot be stopped from another thread

пробовал в основном потоке запускать, та же ошибка, только без «QObject::~QObject: Timers cannot be stopped from another thread»

Traceback (most recent call last):
  File "run_me.py", line 22, in run
    wmi = Moniker('winmgmts:')
  File "C:\Python35-32\lib\site-packages\win32com\client\__init__.py", line 87, in Moniker
    moniker, i, bindCtx = pythoncom.MkParseDisplayName(Pathname)
pywintypes.com_error: (-2147221020, '?????????? ????', None, None)

ofilin86 ()
Ответ на: комментарий от ofilin86

в итоге получается, что ошибка в win32com. не выполняется wmi = Moniker('winmgmts:') хотя этот же код без треда отрабатывает....

ofilin86 ()

разобрался вроде, В потоках, перед созданием COM-объектов нужно вызывать функцию CoInitialize, а при выходе из потока вызвать CoUninitialize. Обе функции находятся в модуле pythoncom.

ofilin86 ()
Ответ на: комментарий от ofilin86

разобрался вроде, В потоках, перед созданием COM-объектов нужно вызывать функцию CoInitialize, а при выходе из потока вызвать CoUninitialize. Обе функции находятся в модуле pythoncom.

спасибо! это очень полезная Linux-информация! люди будут специально заходить на Linux-форум почитать про особенности работы COM-объектами :-)

ну написал бы чтоль хоть для приличия что типа это всё якобы для wine-среды

user_id_68054 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.