小弟在做一个程序 
基于对话框的
我想在一个文本框里面动态的显示程序现在的运行位置
由于是多线程程序  因此 我用的是SendMessage 发送消息给主窗口但是 程序运行起来的时候 , 编辑框的更新特别卡  好长时间不出现东西 然后一次出现很多东西因此 我猜想可能要使用界面线程可是  问题来了 我的程序就是一个对话框  如何创建界面线程??有没有别的处理办法??可以让我的编辑框比较流畅的显示程序运行的位置?

解决方案 »

  1.   

    PostMessage  和SendMessage不一样??
      

  2.   

       Google了一下!!! PostMessage 和SendMessage的区别主要在于是否等待其他程序消息处理。PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;而SendMessage必须等待其他程序处理消息后才返回,继续执行。这两个函数的返回值也不同,PostMessage的返回值表示 PostMessage函数执行是否正确,而SendMessage的返回值表示其他程序处理消息后的返回值。
        
       
      

  3.   

    你发送的是什么消息?估计是消息有问题,Edit不会知道更新
      

  4.   

    处理的速度有点区别,线程,Timer都可以协助你完成的。
      

  5.   

    SendMessage要等待返回结果,跨线程还要切换线程执行完了再切回来PostMessage只把消息投到消息队列就不管了
      

  6.   


    //自定义消息处理函数
    LRESULT CTraficDlg::ChangeUI(WPARAM wParam,LPARAM lParam)
    {
    CString str = (LPCTSTR)lParam; 
    if(str != "查询到")
    str+="\r\n";
    m_strMsg+=str;
    UpdateData(FALSE);
    return 0;
    }
    ...
    ON_MESSAGE (WM_USER_CHANGEUI, ChangeUI)   
      

  7.   

    if()里面的东西 没有什么用m_strMsg 就是对话框变量~
      

  8.   

    你在把
    CString str = (LPCTSTR)lParam; 
        if(str != "查询到")
            str+="\r\n";    
        m_strMsg+=str;
        UpdateData(FALSE);
    这部分的操作放到线程里处理,用一个while(GetMessage(.....))循环,当有消息时就发送PostThreadMessage消息给这个线程
      

  9.   

    LZ,你了解一下,这个是怎么用的:SendMessageTimeout,对你应该有帮助。
    我在做一个多线程显示时,用的就是这个函数向主界面的动态显示列表发送消息的。
      

  10.   

    CWinThread* m_pThread;
    static UINT YourThreaded( LPVOID pVoid );
    m_pThread = ::AfxBeginThread( YourThreaded, (LPVOID) this, 
    THREAD_PRIORITY_BELOW_NORMAL );
    UINT CYourDlg::YourThreaded(LPVOID pVoid)
    {
    CYourDlg* pThis = (CYourDlg*)pVoid;
         while(GetMessage(.....))
        {
            ..................
    ..........................
            pThis->m_strMsg+=str;
          ................
         }
    return 0;

    }
    大概就是这个过程
      

  11.   

    当有处理时就m_pThread.PostThreadMessage(...)
    退出线程时就m_pThread.PostThreadMessage(WM_QUIT...)
      

  12.   

    呵呵 真牛~
    我试试看 行的话  分的大头就是你的~
    没想到过用this指针...
      

  13.   


    没有那么麻烦,填上红色那句(IDC_MYEDIT改成你的edit的id)应该就可以了。
      

  14.   

    你现在用的还是SendMessage吧?
      

  15.   

    你现在用的还是SendMessage吗? 
    就用SendMessage
      

  16.   

    怎么可能呢?
    在线程里....
    sendmessage(主窗口handle, 消息名,0, "要打打印的字符串");在线程外响应这个消息,接收字串,加到Listbox如果这样都出问题,LZ应该是范了某个低级错误,或者是486的机器?
      

  17.   

    不好意思....
    发帖有点草率...
    确实是用的SendMessage...
      

  18.   


    应该不会有什么错误  
    如果不用界面线程的话
    我是运行一部分  发送一个消息
    然后 Sleep一下
    再运行 再发送 再Sleep而显示出来的时候就是要么不显示 要么一下全出来了
      

  19.   

    算了 不管了 就用原来的SendMessage  
    按照MSDN上面说的 应该是消息处理了才会有返回的 才会继续运行的
    估计是机器的问题...