我有一个主线程MainThread ,在主线程中创建一个用户界面线程MyUIThread ,我想问:
1、主线程MainThread和MyUIThread的消息循环 如何进行消息传递?
2、MyUIThread可以认为是一个新的进程吗?他和一般的进程有什么区别?
3、如果他们之间需要交换数据,财务采取什么方式比较合适?谢谢各位能帮助小弟。
1、主线程MainThread和MyUIThread的消息循环 如何进行消息传递?
2、MyUIThread可以认为是一个新的进程吗?他和一般的进程有什么区别?
3、如果他们之间需要交换数据,财务采取什么方式比较合适?谢谢各位能帮助小弟。
具体消息的循环过程,建议你看看MFC编程的书。消息传递的话用SendMessage(),PostMessage().在启动MyUIThread的时候把MainThread的HWND传入,同时MainThread保存MyUIThread的HWND,消息传递函数需要这些参数.
LRESULT SendMessage(
HWND hWnd, // handle of destination window
UINT Msg, // message to send
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);2、MyUIThread可以认为是一个新的进程吗?他和一般的进程有什么区别?
MyUIThread只是一个线程。进程只是个容器,线程才是真正分配CPU时间运行的。3、如果他们之间需要交换数据,财务采取什么方式比较合适?
全局变量的方法,最快。消息量很小的话,直接用消息传递函数的wParam,lParam。数据多的话,就只能用全局变量的方式,不过要做好资源保护。建议你看看windows核心编程。
首先感谢楼上的诚恳的回答。
各位还有什么高见。谢谢
其中前两个需要窗口句柄,后一个不用,但是需要知道线程ID。进程是记录一个应用程序运行的所需的信息,比如存放进程句柄表,记录当前进程中有几个线程等等的信息库,但是CPU真正运行的内容是线程的东西,也就是说操作系统在调度的时候,它根据线程上下文内容来开始运行。在进程内用全局变量就可以了,如果在进程之间的话,可以用共享内存方式等。
1、个消息循环,他们之间如何进行信息传递?on_thread_message 是不是来进行他们的之间的某种映射关系的?2、如果通过PostThreadMessage()向一个线程投递一个消息,接受消息的Thread的消息循环是否要经过某种映射,还是直接可以使用?我重载了接受消息的消息处理函数
LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
if(message==WM_MY_MESS)
{}
return CFrameWnd::WindowProc(message, wParam, lParam);
}无法捕捉到我定义的消息,什么原因?难道消息还经过某种映射吗?谢谢