社区
进程/线程/DLL
帖子详情
多线程与消息机制
styeee
2012-03-12 04:47:45
基于单文档的MFC程序中,主视图类中启动一个子线程。
其中一对话框类向主视图类发送自定义消息,再由主视图类转发消息给子线程。
想请教:为什么主视图类转发的自定义消息在子线程中接收不到?
...全文
327
10
打赏
收藏
多线程与消息机制
基于单文档的MFC程序中,主视图类中启动一个子线程。 其中一对话框类向主视图类发送自定义消息,再由主视图类转发消息给子线程。 想请教:为什么主视图类转发的自定义消息在子线程中接收不到?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dahaiI0
2012-03-22
打赏
举报
回复
有2种方法,一种从CWinThread派生一个类,比如CMyThread,然后
CWinThread* AfxBeginThread(
CRuntimeClass* pThreadClass,
int nPriority = THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
);
创建线程,CMyThread *pThread = (CMyThread*)::AfxBeginThread(RUNTIME_CLASS(CMyThread),0);
-------------------------
另一种方法就是GetMessage
UINT __cdecl ThreadProc(LPVOID lParam)
{
MSG msg;
while( GetMessage(&msg, NULL, 0, 0))
{
switch(msg.message)
{
case WM_SENDFILEDATA:
Sleep(1);
break;
case WM_RECVFILEDATA:
Sleep(1);
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
styeee
2012-03-22
打赏
举报
回复
是将该消息处理的语句放在线程中的run函数是吗?小妹初学者,还望多指教.
[Quote=引用 7 楼 tixisong 的回复:]
线程可以多次接收到消息和自定义消息。
MSG msg={0};
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
和一般窗口消息一样。
引用 6 楼 styeee 的回复:
引用 4 楼 ouyh12345 的回复:
……
[/Quote]
chenkuan9zl
2012-03-15
打赏
举报
回复
[Quote=引用 6 楼 styeee 的回复:]
引用 4 楼 ouyh12345 的回复:
知道线程的id,就可以向线程发线程消息
线程得有GetMessage循环
如果没有GetMessage循环就只能接收一次或者一类自定义消息?
[/Quote]
首先你必须让自己的线程变成UI线程,这个线程才会有消息队列 只要调用了CreateWIndow 或者GetMessage系统就会分配消息队列给该线程,消息队列都没有怎么接受消息
tixisong
2012-03-15
打赏
举报
回复
线程可以多次接收到消息和自定义消息。
MSG msg={0};
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
和一般窗口消息一样。
[Quote=引用 6 楼 styeee 的回复:]
引用 4 楼 ouyh12345 的回复:
知道线程的id,就可以向线程发线程消息
线程得有GetMessage循环
如果没有GetMessage循环就只能接收一次或者一类自定义消息?
[/Quote]
styeee
2012-03-14
打赏
举报
回复
[Quote=引用 4 楼 ouyh12345 的回复:]
知道线程的id,就可以向线程发线程消息
线程得有GetMessage循环
[/Quote]
如果没有GetMessage循环就只能接收一次或者一类自定义消息?
styeee
2012-03-14
打赏
举报
回复
[Quote=引用 2 楼 visualeleven 的回复:]
CWinThread::PostThreadMessage()
[/Quote]
线程是主视图的一个成员函数,在主视图中转发由对话框类发过来的消息。
this->m_pGpsThread->PostThreadMessage(WM_FEATURE,NULL,NULL);
ouyh12345
2012-03-14
打赏
举报
回复
知道线程的id,就可以向线程发线程消息
线程得有GetMessage循环
styeee
2012-03-14
打赏
举报
回复
[Quote=引用 1 楼 ouyh12345 的回复:]
对线程发消息用PostThreadMessage
[/Quote]
是用PostThreadMessage给线程发消息的,可不知道为什么收到,不知道与窗口拆分有没有关系,因为题目中的对话框类不是由主视图类产生的,而是拆分窗口产生的。
Eleven
2012-03-12
打赏
举报
回复
CWinThread::PostThreadMessage()
ouyh12345
2012-03-12
打赏
举报
回复
对线程发消息用PostThreadMessage
POSIX
多线程
程序设计.pdf
内容简介 《POSIX
多线程
程序设计》深入描述了IEEE的开放系统接口标准——POSIX线程,通常称为Pthreads标准。本书首先解释了线程的基本概念,包括异步编程、线程的生命周期和同步
机制
;然后讨论了一些高级话题,包括属性对象、线程私有数据和实时调度。此外,本书还讨论了调度的问题,并给出了避免错误和提高性能等问题的有价值的建议。本书使用了大量注释过后 实例来解释实际的概念,并包括Pthreads的简单索引和对标准化的展望。 《POSIX
多线程
程序设计》适合有经验的C语言程序员阅读,也适合
多线程
人员参考。
【
多线程
】锁
机制
详解
一、锁概述 1.1 概述 在
多线程
环境下,为了让
多线程
安全地访问和使用共享变量,必须引入锁
机制
。锁
机制
即当一个线程持有锁后,其他线程只能进行等待,直到持有锁的线程释放锁,再次重新竞争锁。 1.2 三种锁的大类型 锁大致可以分为互斥锁、共享锁、读写锁 1.2.1 互斥锁(排它锁) 互斥锁,即只有一个线程能够访问被互斥锁保护的资源 在访问共享对象之前,对其进行加锁操作。在访问完成之后进行解锁操作。加锁后,其他试图加锁的线程会被阻塞,知道当前线程解锁。解锁后,原本等待状态的线程变为就绪状态,重.
Qt高级系列之8:Qt
多线程
线程池数据同步
机制
及文件下载器项目实战
1.带领您深入学习QT5/C++:Qt
多线程
线程池及数据同步
机制
,
多线程
文件下载器项目实战,继承自QThread,继承自QObject,QRunnable和QThreadPool,QtConcurrent,Qt
多线程
技术与数据加锁保护
机制
:QMutex,QSemaphore...
深入理解
多线程
概念、同步与无锁
机制
介绍
多线程
编程的相关概念、同步
机制
以及无锁编程。从线程的基础概念出发,包括逻辑线程和硬件线程的比较,以及线程、核心和函数的关系。随后,我们探讨了
多线程
编程的基本原则,包括时间分片、上下文切换、线程安全函数和可重入函数等。接着,我们讨论了为什么需要
多线程
同步、什么情况需要进行同步以及
多线程
同步的方式,包括串行化、原子操作和锁等。我们还深入研究了非阻塞的无锁同步
机制
,如CAS循环和无锁数据结构。最后,我们解释了程序序、内存序、乱序执行、存储缓冲区和失效队列等概念,以帮助更好地理解
多线程
编程。
一文搞定c++
多线程
同步
机制
c++
多线程
同步
机制
同步与互斥 现代操作系统都是多任务操作系统,通常同一时刻有大量可执行实体,则运行着的大量任务可能需要访问或使用同一资源,或者说这些任务之间具有依赖性。 线程同步:线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的
消息
,当它没有得到另一个线程的
消息
时应等待,直到
消息
到达时才被唤醒。例如:两个线程A和B在运行过程中协同步调,按预定的先后次序运行,比如 A 任务的运行依赖于 B 任务产生的数据。 线程互斥:线程互斥是指对于共享的操作系统资源,在各线程访问时具有排它性。
进程/线程/DLL
15,471
社区成员
49,181
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章