多线程编程的基本问题,以分示谢
思路:
1.在主线程A中创建子线程B
2.子线程B完成的功能就是调用一特定的网络api函数:如gethostbyname()(该函数在网络没有连通的情况下有可能会很长时间没有响应,特别是win98下也许1分钟都没有响应)
3.主线程在创建子线程B后会循环判断,如果子线程在10秒内没有回应,强行kill掉子线程
我的代码如下:
主线程内:
m_hThreadWait = AfxBeginThread(MyThreadFunc, this, THREAD_PRIORITY_NORMAL)->m_hThread;
//检查10s,如果10s后仍没有反应,kill
for(int i=0; i<10;i++)
{
if(m_bFlag)//m_bFlag初始化为FALSE,在子线程中设置为TRUE
break;
Sleep(1000);
}
TerminateThread(m_hThreadWait, 0xffffffff);
子线程内:
函数MyThreadFunc
{
HOSTENT* remoteHostent = gethostbyname(host);
if (remoteHostent )
{
m_bFlag == TRUE;//设置标志
}
}
运行后有如下问题:
主线程是在OnTimer中定时调用的这段代码,第一次主线程会创建子线程成功,并进入在子线程的MyThreadFunc函数,但是从第二次以后就再也进不去子线程函数了,通过debug,发现OnTimer每次定时调用后,m_hThreadWait都会产生新值,也就是子线程产生成功,但是为什么就进入不了子线程?