if (! _beginthread(FunRecv, 0, this))
void FunRecv(void *p)
{
    C**** *L = (C**** *)p;    int i = 0;
    while (m_thread) // 关键是这里 我在构造的时候 初始化为 TRUE 为什么程序一运行到这里就变
                        成FALSE  如果把这个变量放在类外面就不会变成 FALSE 
    {
        // recv dat and parse
        if (! L->RecvDat())
            break;
////----
        i++;
        char temp[50];
        sprintf(temp, "%d", i);
        SendMessage(m_page[1], WM_SETTEXT, NULL, (LPARAM)temp);
        Sleep(10);
////----    }
    
    _endthread();
}    
高手救命

解决方案 »

  1.   

    m_thread怎么定义的,是否修改
    用voilate修饰
      

  2.   

    while (m_thread) ? m_thread 是全局变量吗? 什么地方对它有修改?
      

  3.   

    m_thread 是全局的是这个类的 
    public:
          int m_thread;
      

  4.   

    看了你上面的,我觉得应该是 
    m_thread 是公有的是这个类的  不是全局的,  
    F9 ,断点,自己调一下,你的问题看不出
      

  5.   

    用静态变量:
         static int m_thread;
    试一试!
      

  6.   

    多线程的程序是这么写的吗?楼主大约没怎么写过多线程的程序吧?像m_thread 这样的变量应该是全局变量或者某个类的成员变量吧?写多线程的程序,要注意把这些变量用线程同步保护起来,要不这个线程刚要用,那个线程就把这个数字改掉了,那怎么会不出问题?用个临界区或者EVENT来保护一下就好了。
      

  7.   

    int m_thread;
    只在类构造的时候初始化
      

  8.   

    将m_thread定义成类C****的数据成员,创建线程前初试化m_thread.