多线程创建和使用
来源:互联网 发布:编程怎么晓得代码 编辑:程序博客网 时间:2024/06/03 18:42
1 编写线程函数
2 建立多线程句柄
3 在测试函数中直接使用线程:挂起,恢复,结束等
线程方法:
static unsigned _stdcall sleepTest2(void *param)//函数返回值类型以及函数参数类型需要匹配{int count = 2;DWORD exitCode = 0;while(1){Sleep(1500);cout<<" 我是 线程2 启动的循环输出"<<endl;count--;if (count == 0){//GetExitCodeThread(thread2, &exitCode);cout<<endl<<"the exit num is:"<<exitCode<<endl;//ExitThread(exitCode);}}return 1;}
测试函数
void threadTest2(){HANDLE thread;DWORD exit1code = 0;thread = (HANDLE)_beginthreadex(NULL,0, sleepTest, NULL, 0, 0);char c = 'y';while(c){Sleep(1000);cout<<"我是 进程 启动循环"<<endl;cin>>c;if (c == 's'){SuspendThread(thread);}else if (c == 'r'){ResumeThread(thread);}else if ((c == 'n') || (c == 'N')){GetExitCodeThread(thread, &exit1code);CloseHandle(thread);_endthreadex(exit1code);cout<<endl<<" test finish;"<<endl;break;}elsecontinue;}}
直接在主函数中调用此方法,但运行的结果是,在执行_endthreadex(exit1code)后,线程任然没能关闭
但若把线程函数中
//GetExitCodeThread(thread, &exitCode);
cout<<endl<<"the exit num is:"<<exitCode<<endl;
//ExitThread(exitCode);
注释去掉,建立全局函数thread,线程就可以在自己跑完后结束掉
另外也可以用CreateThread Win api创建线程(经量少用)
其定义与 _beginthreadex(NULL,0, sleepTest, NULL, 0, 0) 的使用差不多,各参数的意义:
CreateThread(NULL,0,ThreadProc,NULL,NULL,NULL);
第一个参数是指向安全属性的指针,NULL就行
第二个参数是初始线程堆栈大小,0就可以,WINDOWS会自动分配
第三个参数指向线程函数,必须是这样DWORD WINAPI ThreadProc (LPVOID pParam)
第四个参数是传给线程函数的参数,有就传,没有就NULL
第五个参数是线程启动方式,可以是挂起CREATE_SUSPENDED,或者马上启动NULL
最后一个参数是创建的线程ID。
用其举例,若创建线程是有参数时:
线程函数定义原型:
static unsigned _stdcall sleepTest2(void *param)
线程函数:
void printLeft(LPVOID a = 0)
{
int c = (int )a;
cout<<endl<<"I am print left;and a = "<<c<<endl;
}
创建时:
HANDLE thread;
DWORD id;
thread1 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)printLeft, LPVOID(3), 0, &id);
参考blog:
http://wenku.baidu.com/view/8f7ba26c011ca300a6c3904b.html
http://wenku.baidu.com/view/7b6a1b6348d7c1c708a14516.html
http://www.cnblogs.com/lgxqf/archive/2009/02/10.html
http://www.cnblogs.com/lidabo/archive/2012/08/15/2640204.html
http://www.cnblogs.com/luxiaoxun/archive/2012/10/09/2716514.html
- 多线程创建和使用
- 多线程的创建和使用
- 多线程的创建和使用
- C#_多线程创建和使用
- 使用GCD创建多线程
- Win32多线程的创建方法和基本使用
- Win32 多线程的创建方法和基本使用
- Win32 多线程的创建方法和基本使用
- Java入门基础语法,Java多线程的创建和使用
- Win32 多线程的创建方法和基本使用
- Win32 多线程的创建方法和基本使用
- Win32 多线程的创建方法和基本使用
- 多线程并发 ——使用Executors创建和管理线程
- c++11多线程的创建和unique_lock<mutex>的使用
- 多线程Java:使用Executors创建和管理线程
- 多线程-使用Runnable接口创建多线程
- 【iOS开发-多线程】使用NSThread创建多线程
- 使用Runnable接口创建多线程
- 随机数
- 关于linq to entity中toString()的使用
- [转]Linux常用缩写
- DB9串口接口定义
- FPGA实现RAM--LPM_RAM
- 多线程创建和使用
- 中断
- busybox源码剖析(3)
- FPGA实现基于ROM的正弦波发生器
- CentOS操作系统 GCC升级到4.6.1
- 10046 Event漫步
- 八皇后问题 --回溯
- 如何生成mif文件
- 使用串口模拟工具进行串口程序开发调试