«Не отвечает» при выполнении функции из COM-объекта - PullRequest
3 голосов
/ 18 октября 2019

я уже несколько дней не могу найти решение этой проблемы ...

Я разрабатываю maccro solidworks VB.net, он использует COM-объект из библиотеки DLL, которую я разработал в C++. Функции этого COM-объекта достаточно длинные для выполнения (иногда более 30 секунд), а также используют параллельные циклы (с OpenMP).

Моя проблема заключается в том, что я запускаю одну из этих функций через 10 секунд после запуска программы. не ответит! И это замораживает мой пользовательский интерфейс. Функция dll запущена, и мы не можем отправить обновление в пользовательский интерфейс с DoEvents ...

Я пытался поместить функцию в фоновый рабочий, но с COM-объектом она не работает. Другая вещь, которую я пытался сделать, - заставить фонового работника, который регулярно обращается к моему процессу, видеть, отвечает ли он окнами, но когда он перестает отвечать, я не могу заставить отвечать. Единственное решение, которое я нахожу, - это изменить значение ключа реестра «HungAppTimeout», но это относится ко всему программному обеспечению на компьютере, тогда как я хочу просто применить его к своему коду.

У вас естьрешение, чтобы избежать «нет ответа»?

Пример кода:

Public Sub StartfunctionCOM()

   Dim Myclass as COMClass = new COMClass       
   Myclass.functiontakemanytime() 'time >10sec

end sub

1 Ответ

0 голосов
/ 21 октября 2019

Я нашел решение: я вызываю функцию DisableProcessWindowsGhosting в моем коде c ++. Это не препятствует тому, чтобы приложение "не отвечало", но оно удалит автоматический ответ Windows (то есть стандартное окно сообщения "Приложение больше не отвечает, ждет или убивает?").

...