是
OutputDebugString(PAnsiChar(''));
线程安全?
我/我们一直在线程中使用它来进行调试,如果我以不同的方式做这件事我就不会想到它.
(德尔福7)
嗯,不是说它不是真的,它是,但只是为了让你不必只是为了它而得到Lieven的话:
应用程序和调试器之间的数据传递是通过一个4k字节的共享内存块完成的,其中一个Mutex和两个Event对象保护对它的访问.这些是涉及的四个内核对象.
了解Win32 OutputDebugString是一篇很好的文章.
别担心,确实如此.
当应用程序调用OutputDebugString()时,它将采取这些步骤.请注意,任何时候的失败都会放弃整个过程并将调试请求视为无操作(字符串不会在任何地方发送).
打开DBWinMutex并等到我们拥有它的独占访问权限.
将DBWIN_BUFFER段映射到内存中:如果找不到,则没有调试器运行,因此忽略整个请求.
打开DBWIN_BUFFER_READY和DBWIN_DATA_READY事件.与共享内存段一样,缺少对象意味着没有可用的调试器.
等待DBWIN_BUFFER_READY事件发出信号:这表示内存缓冲区已不再使用.大多数情况下,此事件将在检查时立即发出信号,但缓冲区不会等待超过10秒(超时放弃请求).
将最多约4k字节的数据复制到内存缓冲区,并将当前进程ID存储在那里.始终在字符串的末尾放置一个NUL字节.
通过设置DBWIN_DATA_READY事件告诉调试器缓冲区已准备就绪.调试器从那里获取它.
释放互斥锁
关闭Event和Section对象,尽管我们将句柄保持在互斥体上以便以后使用.