Сообщество программистов Autodesk в СНГ

ADN Club => Другие продукты Autodesk => Navisworks API => Тема начата: Vladislav от 17-03-2020, 15:26:30

Название: Допускает ли API Navisworks (как COM, так и .Net) работу в многопоточном режиме?
Отправлено: Vladislav от 17-03-2020, 15:26:30
Еще такой вопрос.
Допускает ли API Navisworks (как COM, так и .Net) работу в многопоточном режиме?
То есть, к примеру, могу ли я выполнять код, получающий геометрию элементов,
одновременно в нескольких потоках?
Спасибо за информацию.
Название: Re: Допускает ли API Navisworks (как COM, так и .Net) работу в многопоточном режиме?
Отправлено: Александр Ривилис от 17-03-2020, 15:57:42
Интересный вопрос. Я его переадресую в ADN DevHelp. По результатам отпишусь.
Название: Re: Допускает ли API Navisworks (как COM, так и .Net) работу в многопоточном режиме?
Отправлено: Vladislav от 17-03-2020, 16:11:19
Спасибо.
Когда я попробовал это сделать, у меня не получилось.
Но, возможно, я что-то делаю не так...
Название: Re: Допускает ли API Navisworks (как COM, так и .Net) работу в многопоточном режиме?
Отправлено: Александр Ривилис от 17-03-2020, 17:37:21
Когда я попробовал это сделать, у меня не получилось.
Что при этом происходило?
Название: Re: Допускает ли API Navisworks (как COM, так и .Net) работу в многопоточном режиме?
Отправлено: Vladislav от 17-03-2020, 18:43:04
Появляется такое сообщение (см. вложение)
Название: Re: Допускает ли API Navisworks (как COM, так и .Net) работу в многопоточном режиме?
Отправлено: Александр Ривилис от 17-03-2020, 18:46:08
Появляется такое сообщение (см. вложение)
Ага. Ну к COM-серверу насколько я помню нельзя обращаться сразу из нескольких потоков.
Название: Re: Допускает ли API Navisworks (как COM, так и .Net) работу в многопоточном режиме?
Отправлено: Vladislav от 17-03-2020, 18:49:53
Следовательно, и многопоточная работа с API невозможна?
Название: Re: Допускает ли API Navisworks (как COM, так и .Net) работу в многопоточном режиме?
Отправлено: Александр Ривилис от 17-03-2020, 20:29:11
Следовательно, и многопоточная работа с API невозможна?
Давай дождёмся официального ответа.
Название: Re: Допускает ли API Navisworks (как COM, так и .Net) работу в многопоточном режиме?
Отправлено: Александр Ривилис от 20-03-2020, 10:53:05
Vladislav,
Я получил ответ от ADN DevHelp, требующий твоего участия. По их утверждениям многое зависит от контекста выполнения. Так что без примера кода (причем полноценного собираемого проекта) тут никак. Если ты действительно заинтересован в решении этой проблемы, то создай пример проекта. И если ты решишься на это, но не хочешь выкладывать его на всеобщее обозрение, то можешь отправить его лично мне. Я переправлю его в ADN DevHelp для анализа возможности распараллеливания процесса.
Название: Re: Допускает ли API Navisworks (как COM, так и .Net) работу в многопоточном режиме?
Отправлено: Vladislav от 20-03-2020, 13:18:59
Попробую подготовить отдельный.
Только займет некоторое время.
А я должен сам делать в нем распараллеливание или просто указать код, который должен
разбиваться на потоки?
Название: Re: Допускает ли API Navisworks (как COM, так и .Net) работу в многопоточном режиме?
Отправлено: Александр Ривилис от 20-03-2020, 13:24:55
Попробую подготовить отдельный.
Только займет некоторое время.
А я должен сам делать в нем распараллеливание или просто указать код, который должен
разбиваться на потоки?
Отлично, но всё-таки не затягивай процесс, пока мой запрос не закрыли :-) Сделай сам распараллеливание, как ты его видишь. Надеюсь в результате можно будет получить от ADN DevHelp рекомендации как это можно будет правильно сделать. Если конечно это возможно...
Название: Re: Допускает ли API Navisworks (как COM, так и .Net) работу в многопоточном режиме?
Отправлено: Vladislav от 20-03-2020, 17:00:55
Подготовил демонстрационный проект с распараллеливанием процесса получения геометрии (находится во вложении).
Плагин собирается, запускается и далее виснет с указанной ранее ошибкой.
Название: Re: Допускает ли API Navisworks (как COM, так и .Net) работу в многопоточном режиме?
Отправлено: Александр Ривилис от 20-03-2020, 17:15:20
Подготовил демонстрационный проект с распараллеливанием процесса получения геометрии (находится во вложении).
Плагин собирается, запускается и далее виснет с указанной ранее ошибкой.
Еще бы к нему небольшой тестовый файл, на котором испытывать.
Название: Re: Допускает ли API Navisworks (как COM, так и .Net) работу в многопоточном режиме?
Отправлено: Vladislav от 20-03-2020, 18:38:43
Я испытывал на примерах, идущих вместе с Нэвисом. Там несколько в папке samples.
Название: Re: Допускает ли API Navisworks (как COM, так и .Net) работу в многопоточном режиме?
Отправлено: Александр Ривилис от 20-03-2020, 19:26:04
Я испытывал на примерах, идущих вместе с Нэвисом. Там несколько в папке samples.
Принято. Отправил. Попросил прокомментировать код и возможность его ускорить.
Название: Re: Допускает ли API Navisworks (как COM, так и .Net) работу в многопоточном режиме?
Отправлено: Александр Ривилис от 23-03-2020, 14:43:46
Команда инженеров подтвердила, что использовать Navisworks API (и COM, и .NET) можно только из одного (желательно главного) потока:
Цитировать
The answer is "Navisworks is generally not safe for multi-threading."
They suggest to call API function on the main thread.

Название: Re: Допускает ли API Navisworks (как COM, так и .Net) работу в многопоточном режиме?
Отправлено: Vladislav от 23-03-2020, 21:13:29
Большое спасибо за разъяснение!