2016 - 2024

感恩一路有你

mfc多线程的实现方式 handle函数?

浏览量:2712 时间:2023-06-03 09:39:46 作者:采采

handle函数?

HANDLE:Windows使用HANDLE来表示一个对象(不是C中的对象)。HWND是其中之一,HWND是一个句柄,但是句柄不仅仅是HWND。Handl

MFC中的多线程如何实现。和单线程有啥区别?

Windows调度线程,多线程可以实现程序的实时多任务,但也增加了程序的复杂度,即需要线程同步。

要实现一个线程,只需要AfxB

MFC中,我启用线程后,在线程函数中如何获取当前光标所在位置?

这个指针存储在主线程的堆栈中,传递给子线程的指针实际上是访问子线程的堆栈。当然,不可能得到正确的值。其实直接传光标坐标就可以了。在子线程中处理接口会导致频繁的线程切换,影响效率。

子线程可以直接调用主线程方法吗?

启动线程时有一个参数LPVOID,通过这个参数可以传入主线程中的对象指针,子线程可以用这个指针调用它的成员函数。但需要注意的是,不要用子线程中的指针直接调用主线程中窗口对象的成员函数。这将导致一些潜在的错误。因为MFC不是线程安全的。

线程间通信有哪些方式?

多线程通信有三种主要方法:

1.全局变量

进程中线程间的内存共享是一种常见的通信和交互。

注意:定义全局变量时最好使用volatile,以防编译器优化这个变量。

消息机制

消息通信有两个常见的接口:PostMessage和PostThreadMessage。

PostMessage向线程的主窗口发送一条消息。PostThreadMessage是任意两个线程之间的通信接口。

()

功能原型:

B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM LPARAM);

参数:

窗口程序接收消息的窗口的句柄。可以取两个具有特定含义的值:

:消息被发送到系统的所有顶层窗口,包括不属于自己的无效或不可见的窗口和被覆盖的窗口。

和弹出窗口。消息不会发送到子窗口。

NULL:该函数的操作与调用PostThreadMessage函数相同,将参数dwThread设置为当前线程的标识符。

Msg:指定要发送的消息。

WParam:指定特定于消息的附加信息。

IParam:指定附加的特定于消息的信息。

返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值为零。

MS还提供了用于消息间通信的SendMessage方法SendMessage(),它不同于PostMessage:

SendMessage是同步的,而PostMessage是异步的。SendMessage在返回之前必须等待发送的消息被执行。

()

PostThreadMessage方法可以向指定的线程发送消息。

函数原型:Bool post Thread message(dword ID Thread,uintmsg,wparam wparam,lparam lparam)

参数除了ThreadId基本和PostMessage一样。

目标线程通过GetMessage()方法接受消息。

注意:使用这个方法时,目标线程必须已经有了自己的消息队列。否则,将返回ERROR_INVALID_THREAD_ID错误。可以使用

PeekMessage()为线程创建一个消息队列。

3.CEvent

目标

CEvent是MFC中的一个对象,通过改变CEvent的触发状态可以实现线程间的通信和同步。

线程 消息 函数 参数 方法

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。