环境VS2005 MFC对话框程序
问题一:
创建了一个子对话框,单击菜单弹出那种,里面有个编辑框控件,用一个线程不停得刷最后一行数据实现滚屏,问题是刷了几百行后显示会卡死(数据还在,行数不确定),数据是串口读到得多节字符,经过MultiByteToWideChar()转换后显示的,求教是什么问题导致显示卡死?问题二:
串口读入数据,多节字符的,经过MultiByteToWideChar转换后再存入一个CString 字符串,然后调用CStdiofile.writestring写入一个文件,问题是文件写入后每行末尾都有一个‘?'我用UE换到16进制看 是每行末尾是 0D 0D 0A ,也就是俩回车一个换行,我猜想可能是用MultiByteToWideChar转换时每遇到\0(0D)就又加了个OD OA ,求教:如何去掉一个0D 使得每行末尾能显示正常?表达能力不好 希望大家多多帮忙

解决方案 »

  1.   

    你的头像超可爱的,呵呵
    问题一:
    1、使用线程时,要考虑线程同步的问题,因为编辑框是属于一种资源,有可能是当前线程和主线程竞争资源导致死锁,使界面卡死,此时要对编辑框资源进行线程同步处理(如:互斥量、临界区、事件等方式)。
    2、考虑内存是否有泄露的情况。问题二:
    你在写入文件之前,先把字符串末尾的一些特殊字符给过滤掉,再写入文件。可以使用CString类的TrimRight函数,来去除字符串末尾的特殊字符。
      

  2.   

    "几百行后显示会卡死"
    保留前100行就够了,否则Edit内容越来越多,就慢了。
    “数据是串口读到得多节字符”
    注意其中的汉字可能会被拆开(乱码)
      

  3.   

    CStdiofile 有2个模式(text和binary)专门用来处理回车换行的。
    如果是text那么:
    1。如果原文件以0A(换行)作为行结束(linux上的文件),则0A会被转换为(0D,0A)(windows 文件)
    2. 如果原文件以0D 0A(换行)作为行结束,则0D 0A会被转换为(0A)
    请仔细考虑。
      

  4.   

    问题二:你可以使用CString类中的Replace函数,将两个回车一个换行替换成一个回车一个换行。例如:
    CString str = _T("q2djfkdhfksj\r\r\n");
    str.Replace(_T("\r\r\n"),_T("\r\n"));这样试试,可以不?