handle函数?
handle:windows使用handle来表示一个对象(不是c中的对象)。hwnd是其中之一,hwnd是一个句柄,但是句柄不仅仅是hwnd。handl
mfc中的多线程如何实现。和单线程有啥区别?
windows调度线程,多线程可以实现程序的实时多任务,但也增加了程序的复杂度,即需要线程同步。
要实现一个线程,只需要afxb
mfc中,我启用线程后,在线程函数中如何获取当前光标所在位置?
这个指针存储在主线程的堆栈中,传递给子线程的指针实际上是访问子线程的堆栈。当然,不可能得到正确的值。其实直接传光标坐标就可以了。在子线程中处理接口会导致频繁的线程切换,影响效率。
子线程可以直接调用主线程方法吗?
启动线程时有一个参数lpvoid,通过这个参数可以传入主线程中的对象指针,子线程可以用这个指针调用它的成员函数。但需要注意的是,不要用子线程中的指针直接调用主线程中窗口对象的成员函数。这将导致一些潜在的错误。因为mfc不是线程安全的。
线程间通信有哪些方式?
多线程通信有三种主要方法:
1.全局变量
进程中线程间的内存共享是一种常见的通信和交互。
注意:定义全局变量时最好使用volatile,以防编译器优化这个变量。
消息机制
消息通信有两个常见的接口:postmessage和postthreadmessage。
postmessage向线程的主窗口发送一条消息。postthreadmessage是任意两个线程之间的通信接口。
()
功能原型:
b00lpostmessage(hwndhwnd,uintmsg,wparamwparam,lparamlparam);
参数:
窗口程序接收消息的窗口的句柄。可以取两个具有特定含义的值:
:消息被发送到系统的所有顶层窗口,包括不属于自己的无效或不可见的窗口和被覆盖的窗口。
和弹出窗口。消息不会发送到子窗口。
null:该函数的操作与调用postthreadmessage函数相同,将参数dwthread设置为当前线程的标识符。
msg:指定要发送的消息。
wparam:指定特定于消息的附加信息。
iparam:指定附加的特定于消息的信息。
返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值为零。
ms还提供了用于消息间通信的sendmessage方法sendmessage(),它不同于postmessage:
sendmessage是同步的,而postmessage是异步的。sendmessage在返回之前必须等待发送的消息被执行。
()
postthreadmessage方法可以向指定的线程发送消息。
函数原型:boolpostthreadmessage(dwordidthread,uintmsg,wparamwparam,lparamlparam)
参数除了threadid基本和postmessage一样。
目标线程通过getmessage()方法接受消息。
注意:使用这个方法时,目标线程必须已经有了自己的消息队列。否则,将返回error_invalid_thread_id错误。可以使用
peekmessage()为线程创建一个消息队列。
3.cevent
目标
cevent是mfc中的一个对象,通过改变cevent的触发状态可以实现线程间的通信和同步。
原文标题:mfc多线程的实现方式 handle函数?,如若转载,请注明出处:https://www.bjtdsx.com/tag/19899.html
免责声明:此资讯系转载自合作媒体或互联网其它网站,「天地水秀」登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,文章内容仅供参考。