Название: Проблемы при работе в потоке., disphelper,WMI,QThread Отправлено: Mr.Woland от Июль 27, 2011, 21:54 Есть поток, в функции run которого используется функционал disphelper (http://"http://disphelper.sourceforge.net/")'а.
Данный функционал реализует запрос к WMI с целью мониторинга системных событий: Код: try на строчке Код: dhCheck( dhGetObject(L"winmgmts:{impersonationLevel=impersonate,(Security)}!\\\\.\\root\\cimv2",NULL, &wmiSvc) ); Цитировать Member: Но ещё раньше программа вываливалась с сообщением о Runtime error'е.Function: GetObject Error In: GetObjectEx Error: Neioaene?aneay ioeaea Code: 800401e4 (http://"http://www.google.ru/search?client=opera&rls=ru&q=qt+runtime+error&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest#sclient=psy&hl=ru&newwindow=1&client=opera&rls=ru&channel=suggest&source=hp&q=+Error+Code:+++++800401e4&aq=f&aqi=&aql=&oq=&pbx=1&bav=on.2,or.r_gc.r_pw.&fp=6ba3d2abaccd40a9&biw=1600&bih=769") Source: Application" А ещё раньше (и сейчас) в другом приложении данный код (в паре десятков потоков) работает прекрассно и без нареканий. также в данном классе в конструкторе происходит доступ к инструментарию WMI без всяких проблем. Коб вне потока работает. В чем проблема ? Переменные среды, настройки про файлов (за исключением списка файлов) идентичны для рабочего и нерабочего приложения. ЗЫ. Помогите плиз. 2 дня сношусь.... Название: Re: Проблемы при работе в потоке., disphelper,WMI,QThread Отправлено: LisandreL от Июль 27, 2011, 22:48 Вы уверены, что код точно такой же?
Ругается оно на синтекcис запроса, что говорит об одном из двух: а) ошибка в запросе б) класс winmgmts не зарегистрирован на компьютере, на котором вы пытаетесь выполнить код. Название: Re: Проблемы при работе в потоке., disphelper,WMI,QThread Отправлено: Mr.Woland от Июль 27, 2011, 23:13 Вы уверены, что код точно такой же? 100%.тот-же класс прекрассно работает в другом приложении. далее, перед активацией потока, аналогичный запрос вызывается пару раз и все нормально. при вынесении кода из run он начинает прекрассно работать..... Название: Re: Проблемы при работе в потоке., disphelper,WMI,QThread Отправлено: LisandreL от Июль 27, 2011, 23:23 1) В run ошибка возникает всегда или только иногда (а есть и удачные запуски)?
2) wmiSvc где объявлено? 3) Поток такой только 1 работает или несколько? (в программе, где есть ошибки) Название: Re: Проблемы при работе в потоке., disphelper,WMI,QThread Отправлено: Mr.Woland от Июль 27, 2011, 23:31 1) В run ошибка возникает всегда или только иногда (а есть и удачные запуски)? всегда.но первоначально вылетало к чертям с runtime error. 2) wmiSvc где объявлено? член класса.3) Поток такой только 1 работает или несколько? (в программе, где есть ошибки) работает несколько потоков.штук 5-6. все вылетают с ошибкой. Название: Re: Проблемы при работе в потоке., disphelper,WMI,QThread Отправлено: LisandreL от Июль 28, 2011, 00:10 Скажу сразу - готового ответа у меня нет.
Предложу такой план тестирования: 1) Ограничить число потоков QThread до 1. 2) Если ошибка не исчезла, то убрать из главного потока вызовы disphelper'а. 3) Если ошибка всё ещё сохраняется - заменить вызов start() на run(), что бы быть точно уверенным, что точно такой же код в основном потоке ошибок не вызывает. Есть, конечно, ещё вариант отказаться от disphelper'а в пользу QAxObject и иже с ним, но нет уверенности что проблема тут именно в disphelper'е, тем более вы говорите, что в другом приложении нечто такое работает, причём многопоточно. Название: Re: Проблемы при работе в потоке., disphelper,WMI,QThread Отправлено: Mr.Woland от Июль 28, 2011, 18:30 Скажу сразу - готового ответа у меня нет. Проблема решилась.Предложу такой план тестирования: 1) Ограничить число потоков QThread до 1. 2) Если ошибка не исчезла, то убрать из главного потока вызовы disphelper'а. 3) Если ошибка всё ещё сохраняется - заменить вызов start() на run(), что бы быть точно уверенным, что точно такой же код в основном потоке ошибок не вызывает. Решение проблемы: Добавить QWebView к форме из которой создается список потоков. Да. Магия и косяк в Qt при работе с потоками. QWebView тащит за собой пару мингв длл...... Цитировать Есть, конечно, ещё вариант отказаться от disphelper'а в пользу QAxObject и иже с ним, но нет уверенности что проблема тут именно в disphelper'е, тем более вы говорите, что в другом приложении нечто такое работает, причём многопоточно. Пробовал ActiveQt/Но он слишком медленный. Некоторые операции с QAxObject в 10-20 раз медленнее чем черз disphelper. Название: Re: Проблемы при работе в потоке., disphelper,WMI,QThread Отправлено: LisandreL от Июль 28, 2011, 18:46 Да. Магия и косяк в Qt при работе с потоками. Интересно, в самом Qt проблема или в MinGW. VS не пробовали собирать?QWebView тащит за собой пару мингв длл... |