我定义了一个线和,然后在一个对话框中调用这个线程,虽然这个线程是一个死偱环,但是由于是线程,应该不影响主程序,现在我一开动这个线程,整个程序就不动了,为什么,大家来帮我看一下好嘛??
//这是我的线程码
DWORD WINAPI Listen()
{
SOCKADDR_IN saClnt; 
int saClntLen; 
while(1) 

}
return 0;
}
//这是我的线程调用代码
void AVEDlg::Trans()
{
DWORD idThread; 
     CreateThread(NULL,0, 
         (LPTHREAD_START_ROUTINE)Listen(),
     (void*)this,0,&idThread); 

}
//然后我在程序中产生AVEDlg对话框 
AVEDlg* m_dlgAve2;
m_dlgAve2=new AVEDlg();
m_dlgAve2->Trans();
//然后的的程序就不动了。为什么呀??????????????

解决方案 »

  1.   

    线程函数原型不对.DWORD WINAPI ThreadProc(
      LPVOID lpParameter   // thread data
    );
      

  2.   

    while(1) 

      Sleep(0);
    }
    return 0;
      

  3.   

    单步调试了吗?
    瞧连线程的句柄都没有保存 CWinThread * yourthread
    HANDLE CreateThread(
      LPSECURITY_ATTRIBUTES lpThreadAttributes,  // pointer to security attributes
      DWORD dwStackSize,                         // initial thread stack size
      LPTHREAD_START_ROUTINE lpStartAddress,     // pointer to thread function
      LPVOID lpParameter,                        // argument for new thread
      DWORD dwCreationFlags,                     // creation flags
      LPDWORD lpThreadId                         // pointer to receive thread ID
    );
    基本的都没有搞清楚,如果闲这麻烦,试试使用AfxBeginThread控制工作线程,它控制起来容易些!
      

  4.   

    这里  lpThreadAttributes 在win95下不支持,只能用NULL
    NT下可一支持安全特性dwStackSize 缺省为 0 即 1M,你可以自己指定
    lpStartAddress 就是你的函数名字,在C中函数名字就代表地址
    lpStartAddress 是你要传递到线城中的参数
    lpThreadId     返回线城ID
      

  5.   

    while(1)
    {;}
    将会占去几乎所有的CPU时间,所以你的主线程不动了,改为
    while(1)
    {sleep(10);}