首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请教是不是这样就可以结束线程了

2013-07-04 
请问是不是这样就可以结束线程了?FormCreate(){//创建连接线程g_Thread_Handle (HANDLE)_beginthreadex(

请问是不是这样就可以结束线程了?



FormCreate()
{
    //创建连接线程
    g_Thread_Handle = (HANDLE)_beginthreadex( 0, 0, ConnectionProc, Handle, 0, &g_ThreadID );
}


FormClose()
{
    WaitForSingleObject(g_Thread_Handle, INFINITE); //是不是这样就可以结束线程了?
    CloseHandle(g_Thread_Handle); //是不是这样就可以结束线程了?
    g_Thread_Handle = NULL;
}



[解决办法]
WaitForSingleObject(g_Thread_Handle, INFINITE); //这是等待该线程结束
CloseHandle(g_Thread_Handle); //这是关闭句柄
[解决办法]
BOOL TerminateThread(
  HANDLE hThread,
  DWORD dwExitCode
);


[解决办法]
引用:
C/C++ code

while(m_bRuning)
{
    //线程工作
}

m_bRuning = false;
WaitForSingleObject(g_Thread_Handle, INFINITE); //是不是这样就可以结束线程了?
CloseHandle(g_Thread_Handle); //是不是这样就可以结束线程了?
g_Thread_Handle = NULL……

while(m_bRuning)
{
    //线程工作
}

m_bRuning = false;
这几句什么意思?



[解决办法]
引用:
C/C++ code


while(m_bRuning)
{
    //线程工作
    //工作结束后调用关闭函数
    close();
}
void close()
{
if(m_bRuning)
{
m_bRuning = false;//这里是控制启动线程标示符全局的;
WaitForSingleObject(g_Thread_Handle, INFINITE); //这里先等待现成结束;
CloseHandle(g_Thread_Handle); //关闭线程的句柄;
g_Thread_Han……
}

思路没错,不过我觉得你在关闭线程这里是不是也应该写在一个CLOSE函数中,因为在你没用线程
的话,这段代码没必要执行,所以在线程工作函数中最后加上调用这个CLOSE函数来关闭线程,要不
在你没有启动线程就来关闭线程是不是会报错的~~~试试有错误吗??
[解决办法]
http://www.vczx.com/tutorial/mfc/mfc8.php
[解决办法]
FormClose()
{
    WaitForSingleObject(g_Thread_Handle, INFINITE); //你这个是等待线程结束,不是结束线程
    CloseHandle(g_Thread_Handle); //句柄不等于线程本身,它只是一个标识,调用它只会降低句柄的引用计数,并不代表线程结束
    g_Thread_Handle = NULL;
}
[解决办法]
线程结束是指,线程从线程函数自然返回,或者是另一个进程的一个线程调用TerminateThread,导致线程被强制结束
[解决办法]
侯杰有本翻译的书叫 
win32 多线程
你还是看看吧 

热点排行