gpt4 book ai didi

c++ - 来自目标线程的 PostThreadMessage

转载 作者:可可西里 更新时间:2023-11-01 10:54:43 27 4
gpt4 key购买 nike

今天,我看到了这样一段代码:

void Foo()
{
MyMsgStruct myMsg;

/* omission for simplicity */

/* send to update thread */
PostThreadMessage(myThreadId, myMessage, (WPARAM)myMsg, NULL);
}

当从与 myThreadId 相同的线程调用 Foo() 时会发生什么,即 从应该是目标线程的相同线程调用?是性能问题还是只是糟糕的代码编写或两者兼而有之?

我相信它可能会影响性能,因为我相信它会将消息排队到线程的队列中,而不是仅仅做它应该做的事情,因此会稍微减慢程序速度。

线程安全不是我关心的问题对于这个问题

最佳答案

没什么特别的,只是需要一段时间才能调用应该运行的代码。只是延迟,并不一定会使您的程序变慢。有时您是故意这样做的,例如想要响应 Windows 消息但立即响应会导致重新进入问题。

然而,几乎总是应该避免使用 PostThreadMessage。真正糟糕的事情发生在线程也创建窗口时,几乎总是这种情况,因为您倾向于发布到 UI 线程以获取代码,比如更新窗口。每当进入模态循环时,消息都会落入位桶中。就像用于调整窗口大小的那个。或者显示 MessageBox。始终倾向于发布到窗口,消息不会丢失。请检查 PostMessage() 的返回值。

创建一个虚拟的不可见窗口,其窗口过程处理这些消息通常是个好主意。您现在还有一种方法可以检查是否需要发布或可以直接使用 SendMessage 执行。比较 GetWindowThreadProcessId 和 GetCurrentThreadId。

关于c++ - 来自目标线程的 PostThreadMessage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17931913/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com