您的位置:程序门 -> vc/mfc -> 非技术类



头大 写了个 数据处理程序 不停的接收信息 并解析 显示 不知道该把 数据写在哪块 在哪里处理


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


头大 写了个 数据处理程序 不停的接收信息 并解析 显示 不知道该把 数据写在哪块 在哪里处理
发表于:2007-02-06 17:57:51 楼主

我把数据数组   及其处理   放在doc里   又要向   view  
和一些对话框发信息    

整个代码乱糟糟   晕死了   总是着类a   调用那个类b   的成员函数     类b又访问   类a   的成员

大家介绍点经验吧
发表于:2007-02-08 13:22:001楼 得分:0
用mfc的框架,就是要付出这些代价。
发表于:2007-02-08 13:47:532楼 得分:0
可以把类的指针放在app里,这样,所有类都可以得到这个指针.
发表于: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   发消息   不知道我该的又没有道理

发表于:2007-02-09 10:27:524楼 得分:0
你可以将数据和处理封装在一个类里面,然后在app里面声明全局实例。这样你可以通过extern到处访问这个类!这样应该比较方便一点!
发表于:2007-03-09 14:02:255楼 得分:0
大家一般都怎么做呢
发表于:2007-03-09 14:09:596楼 得分:0
你可以将数据和处理封装在一个类里面,然后在app里面声明全局实例。这样你可以通过extern到处访问这个类!这样应该比较方便一点!
发表于:2007-03-12 10:59:257楼 得分:0
可是   不是尽量不要把数据   写成全局类型的吗
发表于:2007-03-12 13:01:168楼 得分:0
哪有这么复杂啊。先定义一个可以描述数据的结构,然后定义一个全局数组或列表。启动线程进行数据采集和解析(这个时候对数据有读写权),在界面上定时刷新数据(只能读不能修改数据)。这样就可以了!
发表于:2007-03-12 15:42:339楼 得分:0
我开始就是这样做的   结果产生了   许多全局变量和全局函数   后来觉得   数据就应该   放在doc里,然后就又放到doc下   结果就有了很多   afxgetmainwnd(0-> getactivedoc()这样的操作
不知道孰重孰轻   晕死了
发表于:2007-04-02 14:53:0310楼 得分:0
继续给点建议,一定多给分。   只有进步了,分才体现了价值


快速检索

最新资讯
热门点击