在另一个线程上调用非静态类函数

发布于 2024-10-24 19:33:45 字数 234 浏览 4 评论 0原文

我重写了很久以前写的一些代码。 该代码是一个使用 AfxBeginThread 启动另一个工作线程的类。当线程结束时,它需要将其工作返回给调用类。

实际上,当线程结束时,它通过 PostMessage 向被调用的类发送一条消息及其结果。 但这种方式确实依赖于 MFC,为此我的类必须实现所有 MFC 的东西。

如果不是发送消息而是直接调用此类的非静态方法,可能是正确的?

I rewriting some code that i written a long time ago.
The code is a class that start another worker thread with AfxBeginThread. When the thread ends, it needs to return it work to the calling class.

Actually when the thread ends it send a message by PostMessage with its results to the called class.
But this way is really dependent of MFC, and to do this my class have to implement all the MFC stuffs.

May be correct if instead of send a message it directly call a non-static method of this class ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浮生未歇 2024-10-31 19:33:45

不要尝试直接调用方法(这会引入一系列全新的线程问题),而是尝试使用本机 Win32 ::PostMessage() 而不是同一函数的 MFC 实现。任何线程都可以调用 ::PostMessage() 将消息安全地传递到另一个线程。

Rather than trying to call a method directly (which will introduce a whole new set of threading problems of its own), try using the native Win32 ::PostMessage() instead of the MFC implementation of the same function. Any thread can call ::PostMessage() to deliver a message to another thread safely.

站稳脚跟 2024-10-31 19:33:45

听起来好像您想使用常规线程原语,而不是窗口消息传递原语。

您使用的是哪个版本的 AfxBeginThread?如果您向其传递一个类实例,那么一旦您知道该类已完成运行,您应该能够直接访问该类的成员。如果您向其传递函数指针,则可以使用 lParam 参数传递任何类指针,然后将其用作通信上下文。

您只想确保在访问该类时以线程安全的方式进行。如果你等到线程结束,你应该没问题。否则,您可以使用关键部分或互斥体。请参阅有关线程同步原语的 MSDN 文章 了解更多信息。

It sounds as though you want to use regular threading primitives, not window messaging primitives.

Which version of AfxBeginThread are you using? If you pass it a class instance, you should be able to access the members of that class directly once you know its finished running. If you passed it a function pointer, you can pass any class pointer in with the lParam parameter, then use that as a communication context.

You just want to make sure that when you access the class you do it in a thread safe manner. If you wait till the thread has ended you should be fine. Otherwise you could use Critical Sections or Mutexes. See the MSDN article on thread synchronization primitives for more info.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文