代码之家  ›  专栏  ›  技术社区  ›  i_am_jorf

GDIPlus线程安全吗?

  •  3
  • i_am_jorf  · 技术社区  · 15 年前

    我仔细阅读了msdn文档,找不到任何声明。我感兴趣的是:

    1. 我可以在一个线程上调用gdilusStartup(),然后在另一个线程上使用gdilus吗?或者我需要为每个线程调用gdiplusStartup()?
    2. 如果我在线程1上有一个位图对象,而在线程2上有一个不同的位图对象,它们可以同时调用bitmap::drawImage(),还是需要添加锁定以确保序列化?

    谢谢。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Alex Deem    15 年前

    这个 MSDN documentation 状态“您可以在一个线程上调用gdiplusStartup,在另一个线程上调用gdiplusShutdown”,这表示您只需要为进程调用一次gdiplusStartup()(并从任何线程使用它)。

    我不确定问题2。(我想你的意思是,你能同时调用graphics::drawimage(位图)吗?)您将在每个线程中创建不同的图形类,对吗?所以应该没问题。

        2
  •  5
  •   dalle    15 年前

    问题2的部分答案,根据 MSDN - Security Considerations: GDI+ :

    线程同步

    可能不止一个 线程可以访问单个GDI+ 对象。但是,gdi+没有提供 任何自动同步 机制。所以如果你的 应用程序具有指向同一对象的指针 GDI+对象,这是您的责任 同步对该对象的访问。

    一些gdi+方法返回 ObjectBusy 如果 线程试图调用方法 当另一个线程正在执行 方法。不要尝试 同步对对象的访问 基于 对象忙 返回值。 相反,每次访问成员时 或调用对象、位置的方法 关键区域内的呼叫,或 使用其他标准 同步技术。