| 发表于:2007-02-08 15:36:393楼 得分:0 |
比如 cmydoc 中的工作线程边处理数据 边向 view 的对话框 发送消息处理 数据 我 把所有的数据都放在 doc中, 一下是我学习 mfc程序设计过程中 依次改进的几个版本 大家来帮忙看看 多提些意见 感激不尽 1、第一版 在cmydoc 添加一个 cview* m_pview; cmydoc::beginthread() { m_pview = getactiveview(); afxbeginthread(threadfun, this); } cmydoc::threadfun(lpvoid pparam) { cmydoc* pdoc = (cmydoc*)pparam; cmyview* pview = (cmyview*)pdoc-> m_pview; /* * 处理数据 */ pview -> m_dlg-> sendmessage(wm_updatedata, 0, (lparam)pdoc-> array); } 可后来看到书上说 mfc 类不是 线程安全的 最好不要把doc view 的指针 直接传给 threadfun (这是我的理解,不知道有没有错),而且这么做 结果 cmydoc不仅要多增加一个变量, 而且 cmydoc 又要#include "cmyiew.h " cmyview又要#include "cmydoc.h " ,结果我的每个文件 都包含有一大堆 头文件 , 于是改进 2、第二版 struct threadfunparam { hwnd hwnd; carray* parray; } cmydoc::beginthread() { threadfunparam* ptp = new threadfunparam; ptp-> hwnd = getactiveview()-> m_hwnd; ptp-> parray = &m_array; afxbeginthread(threadfun, ptp); } cmydoc::threadfun(lpvoid pparam) { threadfunparam* ptp = (threadfunparam*)pparam; hwnd hwnd = ptp-> hwnd; carray* parray = ptp-> parray; sendmessage(hwnd, wm_updatedata, 0, (lparam)parray); } 然后在view中再向dlg 发消息 不知道我该的又没有道理 | | |
|