大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全家桶1年46,售后保障稳定
转载自:http://blog.csdn.net/feigeswjtu/article/details/9984871
个人备注:这个人转载了很多vc,windows,opencv等等相关的文章,进行了分类,可以参考。
MSDN 函数说明
http://msdn.microsoft.com/en-us/library/windows/desktop/ms684957(v=vs.85).aspx
在计算机程序中,线程是一种很重要的资源,使用的恰当可以极大的提高程序的效率,也就是多线程的使用,但是多线程会让应用程序变得异常复杂,会占用大量的系统资源。就像QQ表情一样,每一个QQ表情的闪动都需要构建一个线程,如果用户使用了大量的表情(GIF),将会有多少个线程在运行,系统的性能将大大减少,甚至导致死机。在这种情况下,多线程变得不太合适了,那么什么机制适用于这种情况下呢,这就是线程池。
通常情况下,应用程序中采用异步调用函数的形式来实现多任务,在windows中,系统提供了QueueUserWorkItem函数实现异步调用,这个函数相当于在线程池中建立多个用户工作项目,跟普通线程机制一样,线程池也有线程的同步等机制。查MSDN,可看到QueueUserWorkItem函数语法如下:
BOOL WINAPI QueueUserWorkItem( __in LPTHREAD_START_ROUTINE Function, __in_opt PVOID Context, __in ULONG Flags);
Function就是用户定义的函数,context是P指针,也是Function的参数,Flags表示一组标志值,作用可通过查MSDN看到,这里就不在叙述。
下面实现了一个简单的线程池程序,没有什么大的功能,可以看到线程池的用法。
- #include <iostream>
- #include <assert.h>
- #include <Windows.h>
- #include <string>
- using namespace std;
- DWORD WINAPI TestThreadPool1(PVOID pContext);
- DWORD WINAPI TestThreadPool2(PVOID pContext);
- DWORD WINAPI TestThreadPool3(PVOID pContext);
- CRITICAL_SECTION g_cs;
- int main(int argc, char * argv[])
- {
- QueueUserWorkItem(TestThreadPool1, L“Hello World”, WT_EXECUTEDEFAULT);
- QueueUserWorkItem(TestThreadPool2, L“Hello World”, WT_EXECUTEDEFAULT);
- QueueUserWorkItem(TestThreadPool3, L“Hello World”, WT_EXECUTEDEFAULT);
- getchar();
- return 0;
- }
- DWORD WINAPI TestThreadPool1(PVOID pContext)
- {
- for(int i=0;i<=100;i++)
- {
- cout<<“One Thread is : “<<i<<endl;
- }
- return 0;
- }
- DWORD WINAPI TestThreadPool2(PVOID pContext)
- {
- for(int i=0;i<=100;i++)
- {
- cout<<“Two Thread is : “<<i<<endl;
- }
- return 0;
- }
- DWORD WINAPI TestThreadPool3(PVOID pContext)
- {
- for(int i=0;i<=100;i++)
- {
- cout<<“Three Thread is : “<<i<<endl;
- }
- return 0;
- }
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/206295.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...