主对话框按钮一 运行AfxBeginThread(RUNTIME_CLASS(My_Thread));//创建线程···
然后
BOOL MyThread::InitInstance()
02 {
03 // TODO: perform and per-thread initialization here
04 CFrameWnd* pFrameWnd= new CFrameWnd(); //定义框架对象
05 pFrameWnd->CreateEx(0,AfxRegisterWndClass( CS_HREDRAW|CS_VREDRAW) ,
06 "用户界面线程示例",
07 WS_OVERLAPPEDWINDOW|WS_VISIBLE,
08 CRect(100,100,400,300),
09 NULL,
10 0); //创建窗口
11 m_pMainWnd=pFrameWnd;
12 pFrameWnd->ShowWindow(SW_SHOW); //显示窗口
13 pFrameWnd->UpdateWindow();
14 return TRUE;
15 }
创建新线程的窗口
接着新的线程的窗口 就是子线程运行到Sleep(30000);的时候···发现主对话框(主线程)也··停止了···
问题:为什么用户界面线程Sleep会影响到主线程···
然后
BOOL MyThread::InitInstance()
02 {
03 // TODO: perform and per-thread initialization here
04 CFrameWnd* pFrameWnd= new CFrameWnd(); //定义框架对象
05 pFrameWnd->CreateEx(0,AfxRegisterWndClass( CS_HREDRAW|CS_VREDRAW) ,
06 "用户界面线程示例",
07 WS_OVERLAPPEDWINDOW|WS_VISIBLE,
08 CRect(100,100,400,300),
09 NULL,
10 0); //创建窗口
11 m_pMainWnd=pFrameWnd;
12 pFrameWnd->ShowWindow(SW_SHOW); //显示窗口
13 pFrameWnd->UpdateWindow();
14 return TRUE;
15 }
创建新线程的窗口
接着新的线程的窗口 就是子线程运行到Sleep(30000);的时候···发现主对话框(主线程)也··停止了···
问题:为什么用户界面线程Sleep会影响到主线程···
没返回,造成主界面停住了不要在InitInstance中Sleep,主线程给子线程PostThreadMessage,然后消息函数中Sleep等
返回了···然后子线程运行并创建出窗口·····然后那个窗口运行到Sleep··就连主线程都不动了但是很奇怪的是····在InitInstance中Sleep之后创建的子窗口····子窗口Sleep并不影响主线程···继续求原因···
,Sleep 就这样了····主线程也停了
void C用户界面线程Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
AfxBeginThread(RUNTIME_CLASS(MyThread)); }
BOOL MyThread::InitInstance()
{
// TODO: 在此执行任意逐线程初始化
cc* a=new cc;
a->Create(IDD_DIALOG1,NULL);
a->ShowWindow(SW_SHOW);
return TRUE;
}void cc::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
Sleep(15000);//子窗口单击按钮运行到这里之后···主线程和子线程都停止了···
CDialogEx::OnOK();
}
让CPU去执行其他线程
也就是放弃当前线程的时间片
转而执行其他线程