WinAPI多线程应用程序

时间:2017-01-01 02:24:58

标签: c multithreading winapi

我想创建一个WinAPI应用程序/窗口,因为我不希望我的执行在等待消息时阻塞,我计划有2个线程;主线程和应用程序线程。应用程序线程将创建窗口(CreateWindowEx),然后在消息循环中阻塞。

我的困境来自想要修改应用程序的一部分的主线程。例如,更改样式,大小等。为了保持应用程序的线程安全,我认为最好将这种代码保存在同一个线程上。我的第一个想法是从主线程发布消息,以便应用程序线程解除阻塞并可以处理请求然后再次阻止。但是,我不确定从单独的线程发送消息是否安全,我很难在网上找到答案。可能还有更好的解决方案,我没有考虑。我将不胜感激任何帮助或反馈。

1 个答案:

答案 0 :(得分:2)

跨线程发送包含SendMessage和/或PostMessage的邮件是安全且受支持的。

SendMessage在另一个线程处理消息时等待,而PostMessage不等待。两者之间还存在其他差异,但在您的情况下要记住的重要事项是您无法做到

...
if (whatever)
{
  char buffer[100];
  strcpy(buffer, "hello world");
  PostMessage(g_MyWindow, WM_APP, 0, (LPARAM) buffer); // BUG, must use SendMessage
}
...

因为在另一个线程处理完邮件之前缓冲区可能超出范围。

通常,处理MoveWindowGetWindowRect等窗口的所有Windows函数都是线程安全的。其中大多数也可以在另一个过程中用于Windows ...