windows程序设计中的问题
CTypedSimpleList<CThreadData*>m_list这个好像没见过啊!带一尖括号是什么意思?这几天在看windows程序设计第二版,看到“设计自己的线...
CTypedSimpleList<CThreadData*>m_list这个好像没见过啊!带一尖括号是什么意思?
这几天在看windows程序设计第二版,看到“设计自己的线程局部存储”看得是一知半解的,有没有这节的视频,有的话发个! 展开
这几天在看windows程序设计第二版,看到“设计自己的线程局部存储”看得是一知半解的,有没有这节的视频,有的话发个! 展开
展开全部
<>尖括号表示里面为数据类型
这是一个模板类,类的数据类型在生成对象时指定
如CTypedSimpleList<int*>m_list
CTypedSimpleList<char*>m_list
应该是叫线程区域储存空间(TLS:thread local storage):
静态变量在线程之间是被共享的,因为它们位于程序的数据储存空间中。
动态变量对每一个线程则是唯一的,因为它们占据堆栈上的空间,而每个线程都有它自己的堆栈。
有时让两个或多个线程使用相同的函数,而让这些线程使用唯一于线程的静态变量,那会带来很大便利。这就是线程区域储存空间,例如,C中的strtok函数就要求这种型态的变量。
不幸的是,C语言不支持这类储存空间。但是Windows中提供了四个函数,它们实作了一种技术来做到这一点,并且Microsoft对C的扩充语法也支持它,这就叫做线程区域储存空间。
下面是API工作的方法:
首先,定义一个包含需要唯一于线程的所有数据的结构,例如:
typedef struct
{int a ;
int b ;
}
DATA, * PDATA ;
PDATA pdata ;
在主线程中呼叫TlsAlloc获得一个索引值,储存在一个整体变量中或者通过参数结构传递给线程函数:
dwTlsIndex=TlsAlloc () ;这个值可以。
在线程函数中,使用上面所获得的索引值为该数据结构配置内存:
TlsSetValue (dwTlsIndex, GlobalAlloc (GPTR, sizeof (DATA))));//该函数将索引值和该内存块联系起来。
PDATA pdata=(PDATA) TlsGetValue (dwTlsIndex);//该函数使pdata指向该内存块
现在函数可以设定或者使用pdata->a和pdata->b了。
在线程函数终止前,释放内存:GlobalFree (pdata) ;
或者GlobalFree(TlsGetValue (dwTlsIndex));
在主线程中,释放索引:
TlsFree (dwTlsIndex) ;
这是一个模板类,类的数据类型在生成对象时指定
如CTypedSimpleList<int*>m_list
CTypedSimpleList<char*>m_list
应该是叫线程区域储存空间(TLS:thread local storage):
静态变量在线程之间是被共享的,因为它们位于程序的数据储存空间中。
动态变量对每一个线程则是唯一的,因为它们占据堆栈上的空间,而每个线程都有它自己的堆栈。
有时让两个或多个线程使用相同的函数,而让这些线程使用唯一于线程的静态变量,那会带来很大便利。这就是线程区域储存空间,例如,C中的strtok函数就要求这种型态的变量。
不幸的是,C语言不支持这类储存空间。但是Windows中提供了四个函数,它们实作了一种技术来做到这一点,并且Microsoft对C的扩充语法也支持它,这就叫做线程区域储存空间。
下面是API工作的方法:
首先,定义一个包含需要唯一于线程的所有数据的结构,例如:
typedef struct
{int a ;
int b ;
}
DATA, * PDATA ;
PDATA pdata ;
在主线程中呼叫TlsAlloc获得一个索引值,储存在一个整体变量中或者通过参数结构传递给线程函数:
dwTlsIndex=TlsAlloc () ;这个值可以。
在线程函数中,使用上面所获得的索引值为该数据结构配置内存:
TlsSetValue (dwTlsIndex, GlobalAlloc (GPTR, sizeof (DATA))));//该函数将索引值和该内存块联系起来。
PDATA pdata=(PDATA) TlsGetValue (dwTlsIndex);//该函数使pdata指向该内存块
现在函数可以设定或者使用pdata->a和pdata->b了。
在线程函数终止前,释放内存:GlobalFree (pdata) ;
或者GlobalFree(TlsGetValue (dwTlsIndex));
在主线程中,释放索引:
TlsFree (dwTlsIndex) ;
浙江启扬智能科技有限公司
2023-06-12 广告
2023-06-12 广告
不一定,ARM架构的嵌入式开发可以基于uc/os、Linux、Windows等操作系统,而不一定要使用LINUX操作系统。在ARM架构上,Windows和Linux都是可以使用的,而且许多嵌入式系统开发工具也都是支持这两种操作系统的。因此,...
点击进入详情页
本回答由浙江启扬智能科技有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询