Является ли Gdiplus поточно-ориентированным? - PullRequest
3 голосов
/ 12 ноября 2009

Я просматривал документацию MSDN и не мог найти утверждение так или иначе. Что меня интересует это:

  1. Могу ли я вызвать GdiplusStartup () в одном потоке, а затем использовать Gdiplus в другом потоке? Или мне нужно вызывать GdiplusStartup () для каждого потока?
  2. Если у меня есть объект Bitmap в потоке 1 и другой объект в потоке 2, могут ли они одновременно вызывать Bitmap :: DrawImage () или мне нужно добавить блокировку для обеспечения сериализации?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 30 января 2010

Частичный ответ на вопрос 2 согласно MSDN - Вопросы безопасности: GDI + :

Синхронизация потоков

Возможно более одного поток, чтобы иметь доступ к одному GDI + объект. Однако GDI + не обеспечивает любая автоматическая синхронизация механизм. Так что, если две темы в вашем Приложение имеет указатель на то же GDI + объект, это ваша ответственность синхронизировать доступ к этому объекту.

Некоторые методы GDI + возвращают ObjectBusy, если поток пытается вызвать метод в то время как другой поток выполняет метод на том же объекте. Не пытаться синхронизировать доступ к объекту на основе возвращаемого значения ObjectBusy. Вместо этого каждый раз, когда вы получаете доступ к члену или вызовите метод объекта, поместите вызов внутри критической секции, или использовать какой-то другой стандарт техника синхронизации.

3 голосов
/ 12 ноября 2009

Документация MSDN гласит: «Вы можете вызвать GdiplusStartup в одном потоке и вызвать GdiplusShutdown в другом потоке», что будет означать, что вам нужно вызвать GdiplusStartup () только один раз для вашего процесса (и использовать его из любая нить).

Я не уверен насчет вопроса 2. (Я думаю, что вы имели в виду, можете ли вы назвать Graphics :: DrawImage (bitmap) одновременно?) Вы бы создали разные классы Graphics в каждом потоке, верно? Так что не должно быть никаких проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...