如何关闭这样的线程?
wmjhl 2010-06-26 02:35:20 多个线程使用同一个线程函数,如何关闭单个线程?
我是把多个参数放在数据库里,根据数据库里有多少记录来开多少线程,线程函数是同一个
以下是开始线程代码
void FileSyncDlg::StartTask()
{
// TODO: 在此添加控件通知处理程序代码
HRESULT hr;
long count;
try
{
hr=m_pConn.CreateInstance("ADODB.Connection");
if(SUCCEEDED(hr))
{
hr=m_pConn->Open(_T("driver={SQL Server};Server=wmj;Database=test;UID=sa;PWD=wmjfllhl"),"","",adModeUnknown);
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open("select * from SyncFile",_variant_t((IDispatch*)m_pConn,TRUE),adOpenStatic,adLockOptimistic,adCmdText);
while(!m_pRecordset->adoEOF)
{
m_pRecordset->MoveNext();
}
count=m_pRecordset->GetRecordCount();
}
}
catch(_com_error e)
{
// 捕捉异常
CString errormessage;
errormessage.Format(_T("连接数据库失败!\r\n错误信息:%s"),e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
m_pConn->Close();
long j;
for(j=1;j<=count;j++)
{
CWinThread * p=AfxBeginThread(&FileSyncDlg::SyncThread,&count,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
p->ResumeThread();
}
以下是线程函数:
UINT FileSyncDlg::SyncThread(LPVOID param)
{
long * i=(long*) param;
HRESULT hr;
_ConnectionPtr conn;
_RecordsetPtr recordset;
try
{
hr=conn.CreateInstance("ADODB.Connection");
if(SUCCEEDED(hr))
{
hr=conn->Open(_T("driver={SQL Server};Server=wmj;Database=test;UID=sa;PWD=wmjfllhl"),"","",adModeUnknown);
recordset.CreateInstance("ADODB.Recordset");
recordset->Open("select * from SyncFile",_variant_t((IDispatch*)conn,TRUE),adOpenStatic,adLockOptimistic,adCmdText);
while(recordset->adoEOF)
{
recordset->MoveNext();
}
recordset->MoveFirst();
for(long j=1;j<*i;j++)
{
recordset->MoveNext();
}
}
}
catch(_com_error e)
{
// 捕捉异常
CString errormessage;
errormessage.Format(_T("连接数据库失败!\r\n错误信息:%s"),e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
_variant_t resource,method,path,day,hour,min,account,password;
resource=recordset->GetCollect("Resource");
method=recordset->GetCollect("Method");
path=recordset->GetCollect("BackupPath");
day=recordset->GetCollect("Day");
hour=recordset->GetCollect("Hour");
min=recordset->GetCollect("Min");
account=recordset->GetCollect("Account");
password=recordset->GetCollect("Password");
DWORD sleeptime=(day.intVal*24*3600000)+(hour.intVal*3600000)+(min.intVal*60000);
while(1)
{
SyncFiles(resource,path);
if(method.intVal==0)
Sleep(1000);
else
Sleep(sleeptime);
}
conn->Close();
return 0;
}
水平有限,还请多多指教!