01使用Win32 API创建、销毁线程——控制进度条
来源:互联网 发布:java简易计算器代码 编辑:程序博客网 时间:2024/05/25 08:12
1 GetExitCodeThread
BOOL GetExitCodeThread(
HANDLE hThread,
LPDWORD lpExitCode
);
说明:获取一个已中止线程的退出代码
hThread:想获取退出代码的一个线程的句柄
lpExitCode:用于装载线程退出代码的一个长整数变量。如线程尚未中断,则设为常数STILL_ACTIVE
2 ThreadProc
DWORD WINAPI ThreadProc(LPVOID lpParameter);
说明:定义一个函数作为一个线程的起始服务地址。
lpParameter:接收CreateThread传递的参数(lpParameter)
3CreateThread
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
DWORD dwStackSize,
LPHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadid
);
lpThreadAttributes:指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows NT中,它被设为NULL,表示使用缺省值。
dwStackSize:线程堆栈大小,一般为0,在任何情况下,Windows根据需要动态延长堆栈的大小。
lpStartAddress:指向线程函数的指针。
lpParameter:向线程函数传递的参数,是一个指向结构的指针,不需传递参数时,为NULL。
dwCreateFlags:线程标志,可取值CREATE_SUSPENDED(挂起的线程),0表示立即激活。
lpThreadid保存新线程的id
DWORD WINAPI ThreadFun(LPVOID pThread){lpthread temp=(lpthread)pThread;temp->progress->SetPos(temp->pos);while(temp->pos<20){Sleep(temp->speed);temp->pos++;temp->progress->SetPos(temp->pos);if(temp->pos==20){temp->pos=0;}}return true;}void CCreateThreadDlg::OnStart1(){// TODO: 在此添加控件通知处理程序代码DWORD ThreadID;DWORD code;thread1.progress=&m_progress1;thread1.speed=100;thread1.pos=0;if (!GetExitCodeThread(hThread1,&code)||(code!=STILL_ACTIVE)){hThread1=CreateThread(NULL,0,ThreadFun,&thread1,0,&ThreadID);//创建并开始线程}GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);}void CCreateThreadDlg::OnStart2(){// TODO: 在此添加控件通知处理程序代码DWORD ThreadID;DWORD code;thread2.progress=&m_progress2;thread2.speed=200;thread2.pos=0;if (!GetExitCodeThread(hThread2,&code)||(code!=STILL_ACTIVE)){hThread2=CreateThread(NULL,0,ThreadFun,&thread2,0,&ThreadID);}GetDlgItem(IDC_BUTTON3)->EnableWindow(TRUE);GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);}void CCreateThreadDlg::OnStart3(){// TODO: 在此添加控件通知处理程序代码DWORD ThreadID;DWORD code;thread3.progress=&m_progress3;thread3.speed=200;thread3.pos=0;if(!GetExitCodeThread(hThread3,&code)||(code!=STILL_ACTIVE)){hThread3=CreateThread(NULL,0,ThreadFun,&thread3,0,&ThreadID);}GetDlgItem(IDC_BUTTON5)->EnableWindow(TRUE);GetDlgItem(IDC_BUTTON6)->EnableWindow(FALSE);}void CCreateThreadDlg::OnPause1(){// TODO: 在此添加控件通知处理程序代码DWORD code;if(GetExitCodeThread(hThread1,&code)){if(code==STILL_ACTIVE){TerminateThread(hThread1,0);CloseHandle(hThread1);}}GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE);}void CCreateThreadDlg::OnPause2(){// TODO: 在此添加控件通知处理程序代码DWORD code;if(GetExitCodeThread(hThread2,&code)){if(code==STILL_ACTIVE){TerminateThread(hThread2,0);CloseHandle(hThread2);}}GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE);GetDlgItem(IDC_BUTTON4)->EnableWindow(TRUE);}void CCreateThreadDlg::OnPause3(){// TODO: 在此添加控件通知处理程序代码DWORD code;if (GetExitCodeThread(hThread3,&code)){if(code==STILL_ACTIVE){TerminateThread(hThread3,0);CloseHandle(hThread3);}}GetDlgItem(IDC_BUTTON5)->EnableWindow(FALSE);GetDlgItem(IDC_BUTTON6)->EnableWindow(TRUE);}
- 01使用Win32 API创建、销毁线程——控制进度条
- Win32 API进程创建控制
- Pthreads API解析(创建销毁线程)
- Win32多线程编程(2) — 线程控制
- Win32多线程编程(2) — 线程控制
- Win32多线程编程(2) — 线程控制
- MFC 使用新线程控制进度条
- Delphi中使用Win32 API创建内建消息循环的线程函数
- 使用Win32 API创建串口通讯程序
- Win32 多线程程序设计(5)— 线程的控制
- android线程控制进度条
- 线程控制之进度条
- win32 API 线程编程
- 内核线程创建与销毁
- 线程自动创建与销毁
- Android 线程创建与销毁
- 创建/销毁线程操作示例
- WIN32多线程一 用WIN32 API创建和结束线程(转)
- 对比直接编译进内核和模块形式
- 14个能帮助你打发无聊时光的网站
- 用C#获取CPU编号、硬盘编号等系统有关环境、属性
- Android 获取手机屏幕的宽度和高度
- 开始Admob广告盈利模式详细教程
- 01使用Win32 API创建、销毁线程——控制进度条
- MSHFLEXGRID 属性
- Hibernate深入学习
- 在Java中如何用String类中的indexof方法得到一个词的出现频率
- 使用ListView应该注意的地方,ListView使用总结
- 洗牌算法变种
- web 前台ie不兼容出现的问题及解决方法
- 按位与
- xp上远程连接ubuntu的两种方式 及ubuntu 远程登录xp