C++多线程
2011-01-04 19:58
239 查看
http://www.javaeye.com/topic/375400
Windows API是应用程序与OS底层的一个接口,所以我认为只要我们会利用该接口,也就是调用好合适的方法,然后好好添加上适当的参数,就OK了。该编程方式比OpenMP方式,形式要麻烦些,但是如果使用合理的话,效率自然要高些。
线程管理
线程的创建调用CreateThread()方法。其中,填空的话,主要涉及到有六个参数:
第一个参数,是关于在系统中使用方法进行高级设置,一般为NULL;
第二个参数,是设置线程堆栈大小的,一般为0;
第三个参数,很重要,函数指针,指向实际运行的代码;
第四个参数,参数指针,也就是第三个参数里的参数内容;
第五个参数,设置标志,一般为0;
第六个参数,线程ID,一般为NULL;
总结一下,也就是注意第三个和第四个参数即可~
WaitForMultipleObjects线程的等待,等待4个线程都执行完毕
//以后,主函数方可推出,否则,主函数已经结束,而新创建的函数还在运行着,所以无法看到整个程序真正的
//运行结果,大家可以注释掉该行,看看结果~
线程的终止
1.正常终止,例如上述例子中的helloFunc()函数中最后正常的return;强烈推荐。
2.ExitThread()
3.CloseHandle()
•
2和3的形式都很危险~要杜绝!
线程的等待
DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds);
或者
DWORD WaitForMultipleObjects (DWORD nCount,CONST HANDLE *lpHandles, // array
BOOL fWaitAll, // wait for one or all
DWORD dwMilliseconds[b]);
第一个函数是等待一个线程,第二个函数是等待多个线程,至于线程,都是装在HANDLE或者其数组里。设置好相应的等待时间即可~
多线程编程之一——问题提出
http://www.vckbase.com/document/viewdoc/?id=1704
[/b]
Windows API是应用程序与OS底层的一个接口,所以我认为只要我们会利用该接口,也就是调用好合适的方法,然后好好添加上适当的参数,就OK了。该编程方式比OpenMP方式,形式要麻烦些,但是如果使用合理的话,效率自然要高些。
线程管理
线程的创建调用CreateThread()方法。其中,填空的话,主要涉及到有六个参数:
第一个参数,是关于在系统中使用方法进行高级设置,一般为NULL;
第二个参数,是设置线程堆栈大小的,一般为0;
第三个参数,很重要,函数指针,指向实际运行的代码;
第四个参数,参数指针,也就是第三个参数里的参数内容;
第五个参数,设置标志,一般为0;
第六个参数,线程ID,一般为NULL;
总结一下,也就是注意第三个和第四个参数即可~
#include <windows.h> #include <iostream> using namespace std; const int threadNumbers = 4; DWORD WINAPI ThreadFunc(LPVOID param) { cout<<"Hello World!/n"; return 0; } int main() { HANDLE hThread[threadNumbers]; for(int i=0; i<threadNumbers; i++) hThread[i] = CreateThread(NULL, 0, ThreadFunc, 0, NULL, 0); WaitForMultipleObjects(threadNumbers, hThread, TRUE, INFINITE); }
WaitForMultipleObjects线程的等待,等待4个线程都执行完毕
//以后,主函数方可推出,否则,主函数已经结束,而新创建的函数还在运行着,所以无法看到整个程序真正的
//运行结果,大家可以注释掉该行,看看结果~
线程的终止
1.正常终止,例如上述例子中的helloFunc()函数中最后正常的return;强烈推荐。
2.ExitThread()
3.CloseHandle()
•
2和3的形式都很危险~要杜绝!
线程的等待
DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds);
或者
DWORD WaitForMultipleObjects (DWORD nCount,CONST HANDLE *lpHandles, // array
BOOL fWaitAll, // wait for one or all
DWORD dwMilliseconds[b]);
第一个函数是等待一个线程,第二个函数是等待多个线程,至于线程,都是装在HANDLE或者其数组里。设置好相应的等待时间即可~
多线程编程之一——问题提出
http://www.vckbase.com/document/viewdoc/?id=1704
[/b]
相关文章推荐
- C++多线程(四)
- C++多线程编程入门之经典实例
- c++多线程编程:常见面试题
- C++多线程(九)
- C++多线程实例之临界区同步
- C++多线程-第三篇-Thread(线程)
- C++多线程编程——线程的挂起、唤醒与终止
- C++多线程实例-信号量
- C++多线程
- C++多线程(6)对象互斥
- c++多线程例(事件同步对象,变量共享)
- c++多线程实验代码
- C++多线程
- C++多线程调试和测试的注意事项收藏[转]
- c++多线程读写窗体控件_自定义消息的实现
- C++多线程框架 (二)---------Mutex互斥和Sem信号量
- C++多线程程序设计
- C++多线程调试和测试的注意事项
- C++多线程编程同步技术剖析:临界区,时间,信号量,互斥量
- C++多线程(POSIX)