全局函数
fun2info2 func2info2;
HANDLE hThd[8];
typedef struct
{ int numb;
CString ip;
CString filename;
CString netcommand;
} fun2info2; hThd[i]=::CreateThread(NULL,0,TransportFile,(LPVOID)&func2info2,0,&dwthread);DWORD WINAPI TransportFile(LPVOID lpparam)
{ //pmutex->Lock();
// HANDLE hCounterIn=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"sam sp 44");
fun2info2 * parameter2=(fun2info2 *)lpparam;
// bsendover=false; // char FilePathName[256];
// char fileName[256];
int nBytesLeft;
UINT nBytesRead;
// CMyfile mylogfile;
CTime m_StartTime1=CTime::GetCurrentTime();
CString csStartTime=m_StartTime1.Format("%Y%m%d%H%M%S");
sprintf(fileName, csStartTime); int i=parameter2->numb;
CFile file;
CFileException fe;
long a;
// 打开文件
// WaitForSingleObject(hCounterIn,INFINITE);
if (!file.Open(parameter2->filename , CFile::modeRead, &fe))
{
// 失败
// ReportSaveLoadException(FilePathName, &fe,
// FALSE, AFX_IDP_FAILED_TO_OPEN_DOC);
return 1;
}
// ReleaseMutex(hCounterIn);
nBytesLeft=file.GetLength();
while ( nBytesLeft > 0 )
{
if(nBytesLeft>=BUFF_LENGTH)
{
nBytesRead= file.Read(buffer,BUFF_LENGTH);
if ((SendSocket[i] )->m_bConnected)
(SendSocket[i])->SendString(buffer,nBytesRead);
else
{
SendSocket[i]->Connect((char *)(LPCSTR)parameter2->ip ,SVR_PORT);
if (SendSocket[i]->m_bConnected)
SendSocket[i]->SendDataBuff((char *)(LPCSTR)parameter2->netcommand,fileName);
if (SendSocket[i]->m_bConnected)
SendSocket[i]->SendString(buffer,nBytesRead);
}
nBytesLeft -= nBytesRead;
}
else
{
nBytesRead= file.Read(buffer,nBytesLeft);
if (SendSocket[parameter2->numb]->m_bConnected)
SendSocket[parameter2->numb]->SendString(buffer,nBytesRead);
else
{
SendSocket[parameter2->numb]->Connect((char *)(LPCSTR)parameter2->ip ,SVR_PORT);
if (SendSocket[parameter2->numb]->m_bConnected)
SendSocket[parameter2->numb]->SendDataBuff((char *)(LPCSTR)parameter2->netcommand,fileName);
if (SendSocket[parameter2->numb]->m_bConnected)
SendSocket[parameter2->numb]->SendString(buffer,nBytesRead);
}
nBytesLeft -= nBytesRead;
}
}
SendSocket[parameter2->numb]->DisConnect();
// bsendover=true;//pmutex->Unlock();return 1;
}
初学者,请高手指点,为什么创建线程电脑死机。
fun2info2 func2info2;
HANDLE hThd[8];
typedef struct
{ int numb;
CString ip;
CString filename;
CString netcommand;
} fun2info2; hThd[i]=::CreateThread(NULL,0,TransportFile,(LPVOID)&func2info2,0,&dwthread);DWORD WINAPI TransportFile(LPVOID lpparam)
{ //pmutex->Lock();
// HANDLE hCounterIn=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"sam sp 44");
fun2info2 * parameter2=(fun2info2 *)lpparam;
// bsendover=false; // char FilePathName[256];
// char fileName[256];
int nBytesLeft;
UINT nBytesRead;
// CMyfile mylogfile;
CTime m_StartTime1=CTime::GetCurrentTime();
CString csStartTime=m_StartTime1.Format("%Y%m%d%H%M%S");
sprintf(fileName, csStartTime); int i=parameter2->numb;
CFile file;
CFileException fe;
long a;
// 打开文件
// WaitForSingleObject(hCounterIn,INFINITE);
if (!file.Open(parameter2->filename , CFile::modeRead, &fe))
{
// 失败
// ReportSaveLoadException(FilePathName, &fe,
// FALSE, AFX_IDP_FAILED_TO_OPEN_DOC);
return 1;
}
// ReleaseMutex(hCounterIn);
nBytesLeft=file.GetLength();
while ( nBytesLeft > 0 )
{
if(nBytesLeft>=BUFF_LENGTH)
{
nBytesRead= file.Read(buffer,BUFF_LENGTH);
if ((SendSocket[i] )->m_bConnected)
(SendSocket[i])->SendString(buffer,nBytesRead);
else
{
SendSocket[i]->Connect((char *)(LPCSTR)parameter2->ip ,SVR_PORT);
if (SendSocket[i]->m_bConnected)
SendSocket[i]->SendDataBuff((char *)(LPCSTR)parameter2->netcommand,fileName);
if (SendSocket[i]->m_bConnected)
SendSocket[i]->SendString(buffer,nBytesRead);
}
nBytesLeft -= nBytesRead;
}
else
{
nBytesRead= file.Read(buffer,nBytesLeft);
if (SendSocket[parameter2->numb]->m_bConnected)
SendSocket[parameter2->numb]->SendString(buffer,nBytesRead);
else
{
SendSocket[parameter2->numb]->Connect((char *)(LPCSTR)parameter2->ip ,SVR_PORT);
if (SendSocket[parameter2->numb]->m_bConnected)
SendSocket[parameter2->numb]->SendDataBuff((char *)(LPCSTR)parameter2->netcommand,fileName);
if (SendSocket[parameter2->numb]->m_bConnected)
SendSocket[parameter2->numb]->SendString(buffer,nBytesRead);
}
nBytesLeft -= nBytesRead;
}
}
SendSocket[parameter2->numb]->DisConnect();
// bsendover=true;//pmutex->Unlock();return 1;
}
初学者,请高手指点,为什么创建线程电脑死机。
直接加断点调试是容易死机,可能vc版本太低。