首先我在OnInitDialog()里CreateThread一个线程.线程方法中用 CLogTestDlg *p=(CLogTestDlg*)::AfxGetApp()->GetMainWnd();
p->OnBnClickedGo();
触发了界面的我需要OnBnClickedGo方法.在OnBnClickedGo方法里我加入了 TerminateThread(hThread,0);
CloseHandle(hThread);
WSACleanup();
以结束线程!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
可是OnBnClickedGo也随之结束不执行了。
请问咋样让我的这个线程结束 且不影响OnBnClickedGo的正常执行?------------------------------------附加一个问题-------------------------------------------------
CLogTestDlg *p=(CLogTestDlg*)::AfxGetApp()->GetMainWnd();
和 CLogTestDlg p;
和 CLogTestDlg *log=new CLogTestDlg ();
这三个实例化的区别是什么啊???
p->OnBnClickedGo();
触发了界面的我需要OnBnClickedGo方法.在OnBnClickedGo方法里我加入了 TerminateThread(hThread,0);
CloseHandle(hThread);
WSACleanup();
以结束线程!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
可是OnBnClickedGo也随之结束不执行了。
请问咋样让我的这个线程结束 且不影响OnBnClickedGo的正常执行?------------------------------------附加一个问题-------------------------------------------------
CLogTestDlg *p=(CLogTestDlg*)::AfxGetApp()->GetMainWnd();
和 CLogTestDlg p;
和 CLogTestDlg *log=new CLogTestDlg ();
这三个实例化的区别是什么啊???
MFC 中建立工作线程使用 AfxBeginThread
结束线程,最好是通过全局变量等方法,让线程函数自如退出。
2. 线程结束最好不要用TerminateThread,如果用了,则意味着在线程内堆栈上分配的对象都无法被清理(一个潜在的原因of问题1)
唯一安全的方法是线程自己退出处理函数,结束自己
3.
a) 这不是实例化,是获得一个现有实例的指针
CLogTestDlg *p=(CLogTestDlg*)::AfxGetApp()->GetMainWnd();
b) 这在堆栈上定义一个临时的CLogTestDlg对象
CLogTestDlg p;
c) 下面则是在堆上分配一个对象
和 CLogTestDlg *log=new CLogTestDlg ();
阿荣 你好!当我执行到 CloseHandle(hThread);
方法就停止不执行了
while(m_sigle)
{
..........
}
2.用 WSACleanup(); //释放soket占用的ws3help.dll资源
设置一个信号量 然后wangforsingleobjec,判断信号量是否有信号,要么
return,要没exitthread