mfc多线程的实现方式 handle函数?
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的触发状态可以实现线程间的通信和同步。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。