线程自动关闭

zhengshouquan 2013-07-18 04:06:25
在主程序开始运行就建立了一个线程,处理采集回来的数据队列,只要是通过两个变量来.如下:
//创建线程
HANDLE hThread;
DWORD ThreadID;
hThread=CreateThread(NULL, 0,(LPTHREAD_START_ROUTINE)ThreadFunc,NULL,0, &ThreadID);

void ThreadFunc( )
{
CCollector * pWin= (CCollector*)AfxGetApp()->m_pMainWnd;

//执行采集结束存储过程
while(1)
{
if ( nGatherFlag == 0 )
{
//获取列表中的IP地址
CString strListIP,strList;
int nCurrentRow = 0;
while(nCurrentRow < pWin->m_ListCount)
{
//LIST控件上的地址
strListIP = pWin->m_List.GetItemText(nCurrentRow,1);
if ( strList.GetLength() > 0 )
{
strList = "'" + strListIP + "'," + strList;
}
else
{
strList = "'" + strListIP + "'";
}
nCurrentRow++;
}

//查询采集数据队列的数据是否清理完成
CString strSql;
strSql.Format(" select cj_date from cj_line with(nolock) where cj_ip in ( %s ) ",strList);
pRecordsetDB->Open(_variant_t(strSql),_variant_t((IDispatch*)pConnectDB,true),adOpenStatic,adLockOptimistic,adCmdText);
if( pRecordsetDB->adoEOF )
{
pRecordsetDB->Close();
//设置队列清空标识
nGatherOver = 1;

break;
}
pRecordsetDB->Close();
}

pWin->TransDataToTable();
Sleep(1000);

}

}

当按下按钮代码如下:
nGatherFlag = 0;

//查询采集数据队列的数据是否清理完成
while(1)
{

if( nGatherOver == 1)
{
break;
}

Sleep(10000);

}

线程怎么就关闭不运行了.为什么呢,请各位大虾帮忙看看.
...全文
300 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤客天涯 2013-07-28
  • 打赏
  • 举报
回复
你按钮里的代码是在主线程执行的?里面做了个死循环,还有一个Sleep(10000)?这个Sleep就把你主线程会堵死了,Sleep的时候,你线程也抢不到cpu片
lijianli9 2013-07-20
  • 打赏
  • 举报
回复
1:线程操作界面控件最好通过消息方式。 2:lz可以debug跟踪下,
王林森 2013-07-20
  • 打赏
  • 举报
回复
楼主不用点事件内核对象之类的?
边走边瞧 2013-07-19
  • 打赏
  • 举报
回复
线程使用Sleep?这不是坑爹么。
gg606 2013-07-18
  • 打赏
  • 举报
回复
线程函数还是定义为DWORD WINAPI ThreadProc (LPVOID lpParam) 这样好吧?
引用
当按下按钮代码如下:
按下什么按钮?
引用
线程怎么就关闭不运行了
还是死锁了?

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧