我启动了一个线程 并用了一个SetTimer在3秒内
然后在Ontimer()
{
在一定时间内如果线程没有执行完就用ExitThread终止掉
可是最后终止的是整个应用程序是为什么呢
}
//调用远程的数据
hThread=CreateThread(NULL,
0,
(LPTHREAD_START_ROUTINE)ThreadFunc,
(VOID *)this,
0,
&ThreadID);
::SetTimer(m_hWnd, //指向窗口的句柄。
TimeID, // 定时器标识。
1000, // 1秒
(TIMERPROC) NULL); // 不使用回调函数。void CBuyDlg::OnTimer(UINT nIDEvent)
{
//在一定的时间内终止远程数据更新线程和时间函数
::KillTimer(m_hWnd,TimeID);
if (!(this->IsLoadSuccess))
{
ExitThread(ThreadID); //终止的是整个应用程序??
MessageBox("你的信号不好");
} CDialog::OnTimer(nIDEvent);
}
然后在Ontimer()
{
在一定时间内如果线程没有执行完就用ExitThread终止掉
可是最后终止的是整个应用程序是为什么呢
}
//调用远程的数据
hThread=CreateThread(NULL,
0,
(LPTHREAD_START_ROUTINE)ThreadFunc,
(VOID *)this,
0,
&ThreadID);
::SetTimer(m_hWnd, //指向窗口的句柄。
TimeID, // 定时器标识。
1000, // 1秒
(TIMERPROC) NULL); // 不使用回调函数。void CBuyDlg::OnTimer(UINT nIDEvent)
{
//在一定的时间内终止远程数据更新线程和时间函数
::KillTimer(m_hWnd,TimeID);
if (!(this->IsLoadSuccess))
{
ExitThread(ThreadID); //终止的是整个应用程序??
MessageBox("你的信号不好");
} CDialog::OnTimer(nIDEvent);
}
解决方案 »
- ERROR 'VarCmp' : function does not take 4 parameters
- 通信中断事件的捕获
- 在对话框中调用对话框出问题了
- 在VC中如何实现判断图形是否为封闭图形啊
- 完成端口模型写的程序在Windows XP上运行出错?是我代码问题还是系统兼容问题?
- 【求助】程序中怎样判断 计算机 是隶属于 "域" 还是 "工作组" ?
- 关于DLL的问题,不是很明白,请给点意见
- 那里有做帮助文件的工具下载,我的VC6里没有HTML格式的那个工具?
- 谁愿意给我一个用IMXXMLWRITE写xml创建并写xml文档的例子吗
- 哪儿有最新的cj库下载?
- 一个关于只改变字体高度的奇怪问题????
- [求助] 如何使 A.cpp 中的函数可以调用 b.cpp 中所实现的一个函数
然后使用ExitThread处理,当然本身ExitThread不太好,可以考虑换一种方法。
MS给的解决方案:
别人的贴子:
/*
网络连接请求时间超时值在数毫秒级。如果连接请求时间超过这个超时值,请求将被取消。
缺省的超时值是无限的。
*/
session.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT,60000);
session.SetOption(INTERNET_OPTION_SEND_TIMEOUT,60000);
session.SetOption(INTERNET_OPTION_RECEIVE_TIMEOUT,60000);
/* 在重试连接之间的等待的延时值在毫秒级。*/
session.SetOption(INTERNET_OPTION_CONNECT_BACKOFF,500);
/* 在网络连接请求时的重试次数。如果一个连接企图在指定的重试次数后仍失败,则请求被取消。 缺省值为5。*/
session.SetOption(INTERNET_OPTION_CONNECT_RETRIES, 10);
MS的BUG:
参考:
http://support.microsoft.com/kb/176420/EN-US/
解决方法:
http://support.microsoft.com/kb/224318/en-us
其实我也正为这个头疼呢
只是:结束线程需要在线程函数中完成,即在ThreadFunc()内部调ExitThread()就行了! 建议:最好不要人为的结束线程,让它自己结束是最好的!
在Ontimer使用windows核心对象:Event,告诉子线程结束;
或者
使用全局变量来协调,注意给此全局变量加volatile关键字。
或者
使用全局变量协调,注意要加上volatile关键字。