gpt4 book ai didi

c++ - 使用 MFC,将变量与消息一起发布到线程

转载 作者:太空宇宙 更新时间:2023-11-04 16:04:50 25 4
gpt4 key购买 nike

我正在使用 CWinThread。我让主 GUI 向线程发送 LPARAM 中的一个数组。例如,此代码 WORKS:

//On GUI
char *headData = "L1";
PostThreadMessage(threadID,SEND_HEAD, 0, (LPARAM)head);

在线程上:

void CMyThread::OnSendhead( WPARAM, LPARAM lParam){
char *head = (char*)lParam;
if (strcmp(head,"L1")==0){
//This line is reached.
}
return;
}

但是当我在这里做一点改变时:

char *head = "L1"
unsigned char byteHead[3];
memcpy(byteHead, head, 3);
PostThreadMessage(threadID,SEND_HEAD, 0, (LPARAM)byteHead);

在线程上:

 void CMyThread::OnSendhead( WPARAM, LPARAM lParam){
unsigned char* byteHead = (unsigned char*)lParam;
char head[3];
memcpy(head, byteHead,3);
head[3] = '\0';
if (strcmp(head,"L1")==0){
//This line is nerver reached.
}
return;
}

if 中的行未到达。我已将线程上的代码移至 GUI 进行测试(无需转换为 LPARAM),一切正常。所以我想我不能在 lParamunsigned char* 之间转换?为什么,我该怎么做?谢谢大家

最佳答案

PostMessage 不会立即处理该消息,而是将其留给消息循环稍后接收。如果 lparam 指向的数据在此期间被破坏,它将失败。

在您的第一个示例中,您传递的是字符串文字。字符串文字往往在程序的整个生命周期内保持有效,所以这没问题。

在第二个示例中,您使用的局部变量可能会在您执行 PostMessage 后很快被销毁。

要使它工作,请改用 SendMessage;它会立即得到处理。或者使用保证在消息被处理之前有效的变量。

关于c++ - 使用 MFC,将变量与消息一起发布到线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37313528/

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