#define MAX 100
typedef struct INFO
{
int integer;
char structstr[MAX];
}info;
void ThreadSendInteger(int myint);
void ThreadSendStruct(LPVOID lpParameter);
void ThreadMax();
///
HCURSOR CThreadParamSendDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
/************************************************************************/
/* 起线程,传递整数过去
/************************************************************************/
void CThreadParamSendDlg::OnSendinteger()
{
UpdateData();
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadSendInteger, (void*)m_iThreadSend, 0, 0);
}
/************************************************************************/
/* 传递整数的线程响应函数
/************************************************************************/
void ThreadSendInteger(int myint)
{
CTime interval;
interval = CTime::GetCurrentTime();
CString tem;
for(int i = 0; i<=myint; i++)
{
::SetDlgItemInt(AfxGetMainWnd()->m_hWnd, IDE_THREADDISPLAY, i, TRUE);
Sleep(1000);
}
AfxMessageBox("线程运行完毕");
}
/************************************************************************/
/* 传递结构体的线程响应函数
/***********************************************************************/
void ThreadSendStruct(LPVOID lpParameter)
{
info *infomation = (info *)lpParameter;
CString str;
str.Format("结构体内容为整数%d和字符串%s", infomation->integer, infomation->structstr);
AfxMessageBox(str);
}
/************************************************************************/
/* 传递结构体到线程中
/************************************************************************/
void CThreadParamSendDlg::OnSendstruct()
{
UpdateData();
//结构体赋值
info infomation;
infomation.integer = m_iInteger;
strcpy(infomation.structstr, m_string);
//起线程
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadSendStruct, (void*)&infomation, 0, 0);
}
/************************************************************************/
/* 测试本机最多能创建多少个线程
/************************************************************************/
void CThreadParamSendDlg::OnTestnum()
{
GetDlgItem(IDB_TESTNUM)->EnableWindow(FALSE);
m_iNUm = 0;
while(g_bCreate)
{
if(CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadMax, NULL, 0, 0)==NULL)
{
g_bCreate = FALSE;
break;
}
else
{
m_iNUm++;
}
}
Sleep(3000);
UpdateData(FALSE);
GetDlgItem(IDB_TESTNUM)->EnableWindow(TRUE);
}
/************************************************************************/
/* 响应最多能创建的线程
/************************************************************************/
void ThreadMax()
{
while(g_bCreate)
{
Sleep(3000);
}
}