[英]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函数(例如MoveWindow
和GetWindowRect
都是线程安全的。 它们中的大多数也可以在Windows上以其他方式使用...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.