繁体   English   中英

WinAPI多线程应用程序

[英]WinAPI Multithreaded Application

我想创建一个WinAPI应用程序/窗口,并且由于我不想在等待消息时阻塞执行,因此我打算有2个线程; 主线程和应用程序线程。 应用程序线程将创建窗口(CreateWindowEx),然后在消息循环中阻塞。

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

跨线程发送带有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
}
...

因为该缓冲区可能在其他线程处理该消息之前超出范围。

通常,处理窗口的所有Windows函数(例如MoveWindowGetWindowRect都是线程安全的。 它们中的大多数也可以在Windows上以其他方式使用...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM