TLS 倆種基本用法

2021-05-23 19:25:35 字數 2224 閱讀 1836

1靜態主意: 動態載入的dll中tls靜態不會被初始化...........

//tls_static.cpp : 定義控制台應用程式的入口點。

//#include 

"stdafx.h

"#include 

<

windows.h

>

#include 

<

iostream

>

using

namespace

std ;

//定義靜態tls全域性變數

__declspec(thread) 

intvalue =0

;dword winapi newthread ( lpvoid lparam )

int_tmain(

intargc, _tchar

*argv)

return0;

}

2 動態

//tls_dynamic.cpp : 定義控制台應用程式的入口點。

//#include 

"stdafx.h

"#include 

<

windows.h

>

#include 

<

iostream

>

using

namespace

std ;

//全域性變數儲存tls時隙索引值

//約定所有執行緒都使用tls的這個時隙

uint    ntlsindex =0

;dword winapi newthread ( lpvoid lparam )

int_tmain(

intargc, _tchar

*argv)

//不使用時應該釋放tls時隙

tlsfree ( ntlsindex ) ;

}else

cin.

get() ;

return0;

}

3 delphi 中沒找到替代靜態tls的方法

varform1: tform1;

gtlsindex: uint =0

;implementation

function

newthread(lparam: pointer): dword; 

stdcall

;begin

//設定子執行緒tls值

tlssetvalue(gtlsindex, pointer(

10));

//取得子執行緒tls值

messagebox(

0, pchar(

'子執行緒tls值'+

inttostr(dword(tlsgetvalue(gtlsindex)))), 

'', mb_ok );

result :=0

;end

;procedure

tform1.button1click(sender: tobject);

varthreadid: dword;

h: thandle;

begin

//動態分配tls時隙

gtlsindex :

=tlsalloc();

ifgtlsindex 

<>

tls_out_of_indexes 

then

begin

memo1.lines.add(

'tls: '+

inttostr(gtlsindex));

end;

//主線程tls指定時隙的值

tlssetvalue(gtlsindex, pointer(

5));

h :=

createthread(

nil, 

0, @newthread, 

nil, 

0, threadid);

ifh 

>

0then

begin

waitforsingleobject(h, infinite);

memo1.lines.add(

'主線程tls值'+

inttostr(dword(tlsgetvalue(gtlsindex))));

end;

//不使用時應該釋放tls時隙

tlsfree ( gtlsindex );

end;

operator的倆種用法

c 有時它的確是個耐玩的東東,就比如operator,它有兩種用法,一種是operatoroverloading 操作符過載 一種是operator casting 操作隱式轉換 1.operator overloading c 可能通過operator 過載操作符,格式如下 型別t operato...

交換倆種變數的三種方式

public class exchange 因為main方法是個static方法所以設計的方法也要用static修飾 private static void changevariable01 int a,int b private static void changevariable02 int a...

執行緒THread的倆種建立方式

執行緒建立有倆種方法,一種是擴充套件thread類,也就是繼承thread類,另一種的實現runnable介面.實際上,thread類也實現類runnable介面的.第一種,繼承thread介面 public class mythread extends thread 有main方法呼叫,main方...