以下步骤是建立程序
1、创建一个Dialog工程
2、在Project---Settings---link中加入ws2_32.lib
3、界面上添加两个按钮,button1(运行),button2(停止),
再添加一个CWinThread * m_dlPosThread;
4、添加下面代码
/*
*线程函数
*/
UINT SaveDownloadPos(void *pParent)
{
CString strFile="c:\\temp\\test.log"; long nStartPos=13456890;
CFile tmpFile;
FILE *file;
if((file=fopen(strFile,"r"))==NULL)
{
tmpFile.Open(strFile, CFile::modeCreate|CFile::modeWrite | CFile::typeBinary|CFile::shareDenyWrite);
}
else
{
fclose(file);
/* CFileException ex;
if((tmpFile.Open(strFile,CFile::modeWrite | CFile::typeBinary|CFile::shareDenyWrite),&ex)==0)
{
TCHAR szError[1024];
ex.GetErrorMessage(szError, 1024); ::AfxMessageBox(szError);
tmpFile.Close();
tmpFile.Open(strFile,CFile::modeWrite | CFile::typeBinary|CFile::shareDenyWrite);
}
*/
tmpFile.Open(strFile,CFile::modeWrite | CFile::typeBinary|CFile::shareDenyWrite);
} while(1)
{
Sleep(100);
tmpFile.SeekToBegin(); for(int i=0;i<4;i++)
{
nStartPos+=i*100;
tmpFile.Write(&nStartPos,sizeof(long));
} } return 1;
}5、线程调用
/*
* 线程调用
*/
void CFileTestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
m_dlPosThread=AfxBeginThread(SaveDownloadPos,(void*)this);
}
6、终止线程
/*
* 终止线程
*/
void CFileTestDlg::OnButton2()
{
// TODO: Add your control notification handler code here
TerminateThread(m_dlPosThread->m_hThread,0);
}
7、编译运行
8、点击button1(运行),然后再点击button2(停止),再点击button1(运行)
问题出现。
请各位大侠帮忙解决,谢谢了!
1、创建一个Dialog工程
2、在Project---Settings---link中加入ws2_32.lib
3、界面上添加两个按钮,button1(运行),button2(停止),
再添加一个CWinThread * m_dlPosThread;
4、添加下面代码
/*
*线程函数
*/
UINT SaveDownloadPos(void *pParent)
{
CString strFile="c:\\temp\\test.log"; long nStartPos=13456890;
CFile tmpFile;
FILE *file;
if((file=fopen(strFile,"r"))==NULL)
{
tmpFile.Open(strFile, CFile::modeCreate|CFile::modeWrite | CFile::typeBinary|CFile::shareDenyWrite);
}
else
{
fclose(file);
/* CFileException ex;
if((tmpFile.Open(strFile,CFile::modeWrite | CFile::typeBinary|CFile::shareDenyWrite),&ex)==0)
{
TCHAR szError[1024];
ex.GetErrorMessage(szError, 1024); ::AfxMessageBox(szError);
tmpFile.Close();
tmpFile.Open(strFile,CFile::modeWrite | CFile::typeBinary|CFile::shareDenyWrite);
}
*/
tmpFile.Open(strFile,CFile::modeWrite | CFile::typeBinary|CFile::shareDenyWrite);
} while(1)
{
Sleep(100);
tmpFile.SeekToBegin(); for(int i=0;i<4;i++)
{
nStartPos+=i*100;
tmpFile.Write(&nStartPos,sizeof(long));
} } return 1;
}5、线程调用
/*
* 线程调用
*/
void CFileTestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
m_dlPosThread=AfxBeginThread(SaveDownloadPos,(void*)this);
}
6、终止线程
/*
* 终止线程
*/
void CFileTestDlg::OnButton2()
{
// TODO: Add your control notification handler code here
TerminateThread(m_dlPosThread->m_hThread,0);
}
7、编译运行
8、点击button1(运行),然后再点击button2(停止),再点击button1(运行)
问题出现。
请各位大侠帮忙解决,谢谢了!
解决方案 »
- an invalid argument was encountered
- 移动磁盘读写指针的问题
- MFC初学者的问题
- 送分来啦!!用ADO向Access写数据时,怎样使自动序号每次都从1开始?
- 请指教一下!
- 我在程序中使用了remote data ctl和dbgrid连接数据库,在自己机器上一切正常,在别人机器上用却显示“找不到远程数据源”,可我已经把数
- 请教关于MSFlex的使用方法?如何指定其对应数据源?
- 请问:数据库文件的保存方法?
- writefile可以用来写入double,int等型的数据吗?
- 对远程分布式组件的请来看,提供相关书籍联接者也可给分
- 我的virtualalloc怎么无法调用成功,帮忙看看
- 用vc6.0如何检测到优盘的连接与断开?
不要用TerminateThread结束线程,应该给线程处理函数一个出口条件,以便线程在结束时清理资源(比如打开的文件句柄。)要手动操作CWinThread*,应该以暂停方式启动线程,并置m_bAutoDelete=FASLE.
m_dlPosThread=AfxBeginThread(SaveDownloadPos,(void*)this,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
m_dlPosThread->m_bAutoDelete=FALSE;
m_dlPosThread->ResumeThread();
加一全局变量标志gExitFlag,决定线程是否退出。
改为
gExitFlag = 0;
while(1)
{
if(gExitFlag)break;
Sleep(100);
tmpFile.SeekToBegin(); for(int i=0;i<4;i++)
{
nStartPos+=i*100;
tmpFile.Write(&nStartPos,sizeof(long));
} }
tmpFile.Close();
void CFileTestDlg::OnButton2()
{
// TODO: Add your control notification handler code here
gExitFlag = 1;
}
{
// TODO: Add your control notification handler code here
TerminateThread(m_dlPosThread->m_hThread,0);
CloseHandle(文件句柄);
}