首页 > 编程知识 正文

linuxc语言如何创建线程,java 线程池详解

时间:2023-05-06 07:52:52 阅读:58891 作者:3015

在计算机程序中,线程是重要的资源,正确使用可以大大提高程序的效率,也就是多线程的使用,但多线程使APP应用非常复杂,占用大量的系统资源。 就像QQ表情一样,需要为每个QQ表情的闪烁构建线程。 如果用户使用大量表情(GIF ),则会执行多少个线程,导致系统性能严重下降或死机。 在这种情况下,多线程将不太合适。 那么,什么机制适用于这种情况呢? 这就是线程池。

通常,APP应用程序以异步调用函数的形式实现多任务处理。 在windows上,系统提供QueueUserWorkItem函数以实现异步调用。 此函数相当于在线程池中生成多个用户工作项目,与常规线程机制一样,线程池中也有线程同步等机制。 研究MSDN后,QueueUserWorkItem函数的语法如下:

oolwinapiqueueuserworkitem (_ in lpthread _ start _ routine function,__in_opt PVOID Context,__in ULONG Flags

函数是用户定义的函数,上下文是p指针,也是函数的参数。 Flags表示一组标志值,作用可以通过研究MSDN来看到,本文不进行描述。

我们在下面实现了一个简单的线程池程序,但没有什么大的功能,我们知道如何使用线程池。

# include iostream # include assert.h # include windows.h # includestringusingnamespacestd; dwordwinapitestthreadpool1(pvoidpcontext ); dwordwinapitestthreadpool2(pvoidpcontext ); dwordwinapitestthreadpool3(pvoidpcontext; CRITICAL_SECTION g_cs; intmain(intargc,char * argv[] () queuserworkitem ) testthreadpool1,L'Hello World ',WT_EXECUTEDEFAULT ); queueuserworkitem (test thread pool 2,L'Hello World ',WT_EXECUTEDEFAULT ); queueuserworkitem (test thread pool 3,L'Hello World ',WT_EXECUTEDEFAULT ); getchar (; 返回0; } dwordwinapitestthreadpool1(pvoidpcontext ) for(intI=0; i=100; I ) {cout'One Thread is : 'iendl; }返回0; } dwordwinapitestthreadpool2(pvoidpcontext ) for(intI=0; i=100; I ) {cout'Two Thread is : 'iendl; }返回0; } dwordwinapitestthreadpool3(pvoidpcontext ) for(intI=0; i=100; I ) {cout'Three Thread is : 'iendl; }返回0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。