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方...