【问题标题】:Receive a message struct type using GetMessage and then assign to another same struct使用 GetMessage 接收消息结构类型,然后分配给另一个相同的结构
【发布时间】:2017-10-20 21:10:32
【问题描述】:

我已经通过PostThreadMessage 将消息发送到所需的线程,并在参数lparam 中将内存地址传递给我要发送的结构:

struct myStruct estructura;
PostThreadMessage( p->idHilo, WM_USER, 10 , (LPARAM)&estructura);

收到后我会这样做:

struct estructura *e;
while(GetMessage( &mensaje, NULL, WM_USER, WM_USER+2)){
    e  =  &mensaje.lParam;
    printf("%c\n",e->miCaracter);
}

【问题讨论】:

  • 为什么用进程标签来标记?你在做这个跨流程吗?

标签: c windows multithreading process


【解决方案1】:

e = &mensaje.lParam 错误,应该是e = (estructura*) mensaje.lParam;,但它仍然不能可靠地工作。

您不能将消息发布到另一个线程并带有指向堆栈上的某个内容的指针,因为当另一个线程检索消息时堆栈可能已经消失/更改。

您应该使用以下替代方法之一:

  • 创建一个窗口,以便您可以使用SendMessage
  • 在堆上分配结构,让其他线程释放它
  • 将结构设为全局

如果线程在另一个进程中,那么您可以创建一个命名文件映射。

【讨论】:

  • 我检查了 e = (estructura*) mensaje.lParam;但无论如何它都不起作用。
  • @Alber 是的,因为如果您没有采取措施阻止它,它就会消失。你应该使用安德斯列出的三种可能性中的哪一种?我会选择“在堆上分配结构并让另一个线程释放它”。
猜你喜欢
  • 1970-01-01
  • 2021-12-10
  • 2019-03-18
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 2012-07-29
相关资源
最近更新 更多