Synchronize () прерывает поток

Я пишу библиотеку dll в Delphi с несколькими создаваемыми ею потоками.Опишу проблему шаг за шагом. Заранее прошу прощения за длинное описание :-(.

Давайте на время забудем о библиотеке. Я создал приложение для Windows, которое будет отображать виды с нескольких камер. Я создал окно, предназначенное для отображения вид с одной камеры и он содержит элемент управления TImage. Существует поток (потомок TThread), который загружает текущее изображение с камеры каждые пару миллисекунд и назначает его элементу управления TImage этого окна (с помощью Synchronize () При запуске приложение создает несколько экземпляров этого окна (с отдельным потоком для каждого из них), поэтому вы можете видеть изображение в реальном времени с нескольких камер одновременно. Более того, все эти окна просмотра являются родительскими для основного приложения.

Все работало нормально, пока я не решил поместить эти два окна в библиотеку dll. Я просто счел это необходимым по некоторым причинам, но сейчас они не важны. Поэтому я создал новую библиотеку dll , добавил существующий основной window и окно обзора камеры в проект и экспортировала функцию, которая создает и возвращает экземпляр главного окна. Когда создается главное окно, оно создает несколько окон просмотра камеры, что делает себя их родителем.

Затем, в целях тестирования, я создал приложение, которое импортирует вышеупомянутую функцию dll из библиотеки и вызывает ее при запуске, чтобы получить экземпляр главного окна; затем просто показывает его на экране (в немодальном состоянии).

Когда я запустил приложение, выяснилось, что я не могу получить ни одного изображения ни с одной камеры.При отладке я заметил, что когда поток вызывает метод Synchronize (), он зависает навсегда. Этого не произошло до того, как оба этих окна были помещены в dll.

И это моя проблема. Честно говоря, это мой первый подход к библиотекам, с которым мне пришлось столкнуться со многими другими проблемами. Вы можете задаться вопросом, почему я использую окна вместо фреймов ... Поэтому всякий раз, когда я создавал экземпляр TFrame в dll, я получал исключение, в котором говорилось, что «элемент управления xxx не имеет родительского окна». Я не знал, что с этим делать, поэтому вместо этого использовал окна :-(.

Не могли бы вы сказать мне, что делать с проблемой синхронизации? запустился, так как принимает кнопки и т. д. В чем проблема?

Помогите, пожалуйста!

Заранее спасибо !!

6
задан Kara 13 January 2014 в 20:13
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: