c - 如何将数据(结构)作为消息传递给线程。

标签 c winapi message-queue

如何将数据从主应用程序传递到线程?

在主应用程序中,我创建了一个线程来处理错误消息。在主应用程序中处理数据时,如果出现错误,它会生成一条错误消息并将其填充到一个结构中。此错误消息(结构)需要传递给线程,该线程将进一步处理它,主应用程序应继续其工作。我正在尝试在 Windows 平台上用 C 语言来做这件事。

我的应用程序中只会运行一个线程。目前我已经定义了一个全局变量结构 (myData) 并使用 PostThreadMessage.

传递它
struct myData errorData;

从主应用程序使用

发布消息
PostThreadMessage(ErrorLogId, THRD_MESSAGE_EXIT , 0 , (LPARAM)&errorData);

在我的线程中

MsgReturn = GetMessage(&msg, NULL, THRD_MESSAGE_SOMEWORK, THRD_MESSAGE_EXIT);

目前它工作正常。但是,如果处理错误消息需要更多时间,到那时主应用程序可能会收到新错误并更新全局结构 errorData 中的数据。

我可以使用锁定机制,但在线程完成处理之前我无法停止主应用程序。如何在不将数据作为全局变量的情况下传递数据?

最佳答案

每次您要调用 PostThreadMessage() 时,您可能希望创建一个新的 struct myData 实例。

线程在完成时需要free() struct myData 实例。

在您当前的方法中添加同步将违背在主任务继续进行时生成工作人员的异步概念。

无论如何,线程仍然需要在它们这边使用同步,例如在将某些内容写入共享日志文件的情况下。

关于c - 如何将数据(结构)作为消息传递给线程。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13045442/

相关文章:

c++ - 有没有一种简单的方法来分析头文件并获得所有#defines 的结果列表?

c - C 代码中的 SIGBART 与 malloc/free

c - "Ej4.exe has stopped working"– 如何使用调试器?

c++ - 如何检索当前事件窗口光标下的单词?

c++ - ON_NOTIFY、ON_CONTROL、ON_CONTROL_REFLECT 之间有什么区别?

c# - Azure函数: async method and output parameters

message-queue - 如何知道字节数组是哪个protobuf消息?

c - 将字符串分配给 int 并将该 int 传递给 printf 如何正确打印字符串?

c - 等待单个对象 : do not lock a mutex but check the current state?

javascript - 为什么 HTTPs Node 库中的回调被调用两次?如何预防呢?