锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
2
3 # locks.py zhangsk
4 import threading, time
5
6 b = 50
7 l = threading.Lock()
8
9 def threadcode():
10 """This is run in the created threads"""
11 global b
12 print "Thread %s invoked" % threading.currentThread().getName()
13 l.acquire()
14 try:
15 print "Thread %s running" % threading.currentThread().getName()
16 time.sleep(1)
17 b = b + 50
18 print "Thread %s set b to %d" % (threading.currentThread().getName(), b)
19 finally:
20 l.release()
21
22 print "Value of b at start of program:", b
23 childthreads = []
24
25 for i in range(1, 5):
26 t = threading.Thread(target = threadcode, name = "Thread-%d" % i)
27 t.setDaemon(1)
28 t.start()
29 childthreads.append(t)
30
31 for t in childthreads:
32 t.join()
33
34 print "New Value of b:", b
]]>
銆銆Nicrosoft(nicrosoft@sunistudio.com) -- 2001.8.26
http://www.sunistudio.com/nicrosoft/
銆銆涓滄棩鏂囨。錛?a >http://www.sunistudio.com/asp/sunidoc.asp
銆銆澶у閮借涓猴紝C璇█涔嬫墍浠ュ己澶э紝浠ュ強(qiáng)鍏惰嚜鐢辨э紝寰堝ぇ閮ㄥ垎浣撶幇鍦ㄥ叾鐏墊椿鐨勬寚閽堣繍鐢ㄤ笂銆傚洜姝わ紝璇存寚閽堟槸C璇█鐨勭伒欖傦紝涓鐐歸兘涓嶄負(fù)榪囥傚悓鏃訛紝榪欑璇存硶涔熻寰堝浜轟駭鐢熻瑙o紝浼間箮鍙湁C璇█鐨勬寚閽堟墠鑳界畻鎸囬拡銆侭asic涓嶆敮鎸佹寚閽堬紝鍦ㄦ涓嶈銆傚叾瀹烇紝Pascal璇█鏈韓涔熸槸鏀寔鎸囬拡鐨勩備粠鏈鍒濈殑Pascal鍙戝睍鑷充粖鐨?Object Pascal錛屽彲浠ヨ鍦ㄦ寚閽堣繍鐢ㄤ笂錛屼笣姣笉浼?xì)閫婅壊浜嶤璇█鐨勬寚閽堛?
銆銆浠ヤ笅鍐呭鍒嗕負(fù)鍏釜閮ㄥ垎錛屽垎鍒槸
銆銆涓銆佺被鍨嬫寚閽堢殑瀹氫箟
銆銆浜屻佹棤綾誨瀷鎸囬拡鐨勫畾涔?
銆銆涓夈佹寚閽堢殑瑙i櫎寮曠敤
銆銆鍥涖佸彇鍦板潃錛堟寚閽堣祴鍊鹼級
銆銆浜斻佹寚閽堣繍綆?
銆銆鍏佸姩鎬佸唴瀛樺垎閰?
銆銆涓冦佸瓧絎︽暟緇勭殑榪愮畻
銆銆鍏佸嚱鏁版寚閽?
銆銆涓銆佺被鍨嬫寚閽堢殑瀹氫箟銆傚浜庢寚鍚戠壒瀹氱被鍨嬬殑鎸囬拡錛屽湪C涓槸榪欐牱瀹氫箟鐨勶細(xì)
銆銆銆銆int *ptr;
銆銆銆銆char *ptr;
銆銆銆銆涓庝箣絳変環(huán)鐨凮bject Pascal鏄浣曞畾涔夌殑鍛紵
銆銆銆銆var ptr : ^Integer;
銆銆銆銆銆銆ptr : ^char;
銆銆銆銆鍏跺疄涔熷氨鏄鍙風(fēng)殑宸埆鑰屽凡銆?
銆銆浜屻佹棤綾誨瀷鎸囬拡鐨勫畾涔夈侰涓湁void *綾誨瀷錛屼篃灝辨槸鍙互鎸囧悜浠諱綍綾誨瀷鏁版嵁鐨勬寚閽堛侽bject Pascal涓哄叾瀹氫箟浜嗕竴涓笓闂ㄧ殑綾誨瀷錛歅ointer銆備簬鏄紝
銆銆銆銆ptr : Pointer;
銆銆銆銆灝變笌C涓殑
銆銆銆銆void *ptr;
銆銆銆銆絳変環(huán)浜嗐?
銆銆涓夈佹寚閽堢殑瑙i櫎寮曠敤銆傝瑙i櫎鎸囬拡寮曠敤錛堝嵆鍙栧嚭鎸囬拡鎵鎸囧尯鍩熺殑鍊鹼級錛孋 鐨勮娉曟槸 (*ptr)錛孫bject Pascal鍒欐槸 ptr^銆?
銆銆鍥涖佸彇鍦板潃錛堟寚閽堣祴鍊鹼級銆傚彇鏌愬璞$殑鍦板潃騫跺皢鍏惰祴鍊肩粰鎸囬拡鍙橀噺錛孋 鐨勮娉曟槸
銆銆銆銆ptr = &Object;
銆銆銆銆Object Pascal 鍒欐槸
銆銆銆銆ptr := @Object;
銆銆銆銆涔熷彧鏄鍙風(fēng)殑宸埆鑰屽凡銆?
銆銆浜斻佹寚閽堣繍綆椼傚湪 C 涓紝鍙互瀵規(guī)寚閽堣繘琛岀Щ鍔ㄧ殑榪愮畻錛屽錛?
銆銆銆銆char a[20];
銆銆銆銆char *ptr=a;
銆銆銆銆ptr++;
銆銆銆銆ptr+=2;
銆銆銆銆褰撴墽琛宲tr++;鏃訛紝緙栬瘧鍣ㄤ細(xì)浜х敓璁﹑tr鍓嶈繘sizeof(char)姝ラ暱鐨勪唬鐮侊紝涔嬪悗錛宲tr灝嗘寚鍚慳[1]銆俻tr+=2;榪欏彞浣垮緱ptr鍓嶈繘涓や釜sizeof(char)澶у皬鐨勬闀褲傚悓鏍鳳紝鎴戜滑鏉ョ湅涓涓婳bject Pascal涓浣曞疄鐜幫細(xì)
銆銆銆銆var a : array [1..20] of Char;
銆銆銆銆銆銆ptr : PChar; //PChar 鍙互鐪嬩綔 ^Char
銆銆銆銆begin
銆銆銆銆銆銆ptr := @a;
銆銆銆銆銆銆Inc(ptr); // 榪欏彞絳変環(huán)浜?C 鐨?ptr++;
銆銆銆銆銆銆Inc(ptr, 2); //榪欏彞絳変環(huán)浜?C 鐨?ptr+=2;
銆銆銆銆end;
銆銆鍏佸姩鎬佸唴瀛樺垎閰嶃侰璇█涓紝浣跨敤malloc()搴撳嚱鏁板垎閰嶅唴瀛橈紝free()鍑芥暟閲婃斁鍐呭瓨銆傚榪欐牱鐨勪唬鐮侊細(xì)
銆銆銆銆int *ptr, *ptr2;
銆銆銆銆int i;
銆銆銆銆ptr = (int*) malloc(sizeof(int) * 20);
銆銆銆銆ptr2 = ptr;
銆銆銆銆for (i=0; i<20; i++){
銆銆銆銆銆銆*ptr = i; ptr++;
銆銆銆銆}
銆銆銆銆free(ptr2);
銆銆銆銆Object Pascal涓紝鍔ㄦ佸垎閰嶅唴瀛樼殑鍑芥暟鏄疓etMem()錛屼笌涔嬪搴旂殑閲婃斁鍑芥暟涓篎reeMem()錛堜紶緇?Pascal涓幏鍙栧唴瀛樼殑鍑芥暟鏄疦ew()鍜?Dispose()錛屼絾New()鍙兘鑾峰緱瀵硅薄鐨勫崟涓疄浣撶殑鍐呭瓨澶у皬錛屾棤娉曞彇寰楄繛緇殑瀛樻斁澶氫釜瀵硅薄鐨勫唴瀛樺潡錛夈傚洜姝わ紝涓庝笂闈㈤偅孌礐鐨勪唬鐮佺瓑浠風(fēng)殑Object Pascal鐨勪唬鐮佷負(fù)錛?
銆銆銆銆var ptr, ptr2 : ^integer;
銆銆銆銆銆銆i : integer;
銆銆銆銆begin
銆銆銆銆銆銆GetMem(ptr, sizeof(integer) * 20);
銆銆銆銆銆銆銆銆//榪欏彞絳変環(huán)浜嶤鐨?ptr = (int*) malloc(sizeof(int) * 20);
銆銆銆銆銆銆ptr2 := ptr; //淇濈暀鍘熷鎸囬拡浣嶇疆
銆銆銆銆銆銆for i := 0 to 19 do
銆銆銆銆銆銆begin
銆銆銆銆銆銆銆銆ptr^ := i;
銆銆銆銆銆銆銆銆Inc(ptr);
銆銆銆銆銆銆end;
銆銆銆銆銆銆FreeMem(ptr2);
銆銆銆銆end;
銆銆銆銆瀵逛簬浠ヤ笂榪欎釜渚嬪瓙錛堟棤璁烘槸C鐗堟湰鐨勶紝榪樻槸Object Pascal鐗堟湰鐨勶級錛岄兘瑕佹敞鎰忎竴涓棶棰橈紝灝辨槸鍒嗛厤鍐呭瓨鐨勫崟浣嶆槸瀛楄妭錛圔YTE錛夛紝鍥犳鍦ㄤ嬌鐢℅etMem鏃訛紝鍏剁浜屼釜鍙傛暟濡傛灉鎯沖綋鐒剁殑鍐欐垚 20錛岄偅涔堝氨浼?xì)鍑洪棶棰樹簡锛堝唴瀛樿畨K棶瓚婄晫錛夈傚洜涓篏etMem(ptr, 20);瀹為檯鍙垎閰嶄簡20涓瓧鑺傜殑鍐呭瓨絀洪棿錛岃屼竴涓暣褰㈢殑澶у皬鏄洓涓瓧鑺傦紝閭d箞璁塊棶絎簲涓箣鍚庣殑鎵鏈夊厓绱犻兘鏄潪娉曠殑浜嗭紙瀵逛簬malloc()鐨勫弬鏁板悓鏍鳳級銆?
銆銆涓冦佸瓧絎︽暟緇勭殑榪愮畻銆侰璇█涓紝鏄病鏈夊瓧絎︿覆綾誨瀷鐨勶紝鍥犳錛屽瓧絎︿覆閮芥槸鐢ㄥ瓧絎︽暟緇勬潵瀹炵幇錛屼簬鏄篃鏈変竴濂梥tr鎵撳ご鐨勫簱鍑芥暟浠ヨ繘琛屽瓧絎︽暟緇勭殑榪愮畻錛屽浠ヤ笅浠g爜錛?
銆銆銆銆char str[15];
銆銆銆銆char *pstr;
銆銆銆銆strcpy(str, "teststr");
銆銆銆銆strcat(str, "_testok");
銆銆銆銆pstr = (char*) malloc(sizeof(char) * 15);
銆銆銆銆strcpy(pstr, str);
銆銆銆銆printf(pstr);
銆銆銆銆free(pstr);
銆銆銆銆鑰屽湪Object Pascal涓紝鏈変簡String綾誨瀷錛屽洜姝ゅ彲浠ュ緢鏂逛究鐨勫瀛楃涓茶繘琛屽悇縐嶈繍綆椼備絾鏄紝鏈夋椂鎴戜滑鐨凱ascal浠g爜闇瑕佷笌C鐨勪唬鐮佷氦浜掞紙姣斿錛氱敤Object Pascal鐨勪唬鐮佽皟鐢–鍐欑殑DLL鎴栬呯敤Object Pascal 鍐欑殑DLL鍑嗗鍏佽鐢–鍐欏鎴風(fēng)鐨勪唬鐮侊級鐨勮瘽錛屽氨涓嶈兘浣跨敤String綾誨瀷浜嗭紝鑰屽繀欏諱嬌鐢ㄤ袱縐嶈璦閫氱敤鐨勫瓧絎︽暟緇勩傚叾瀹烇紝Object Pascal鎻愪緵浜嗗畬鍏ㄧ被浼糃鐨勪竴鏁村瀛楃鏁扮粍鐨勮繍綆楀嚱鏁幫紝浠ヤ笂閭f浠g爜鐨凮bject Pascal 鐗堟湰鏄繖鏍風(fēng)殑錛?
銆銆銆銆var str : array [1..15] of char;
銆銆銆銆銆銆pstr : PChar; //Pchar 涔熷氨鏄?^Char
銆銆銆銆begin
銆銆銆銆銆銆StrCopy(@str, 'teststr');
銆銆銆銆銆銆銆銆//鍦–涓紝鏁扮粍鐨勫悕縐板彲浠ョ洿鎺ヤ綔涓烘暟緇勯鍦板潃鎸囬拡鏉ョ敤
銆銆銆銆銆銆銆銆//浣哖ascal涓嶆槸榪欐牱鐨勶紝鍥犳 str鍓嶈鍔犱笂鍙栧湴鍧鐨勮繍綆楃
銆銆銆銆銆銆StrCat(@str, '_testok');
銆銆銆銆銆銆GetMem(pstr, sizeof(char) * 15);
銆銆銆銆銆銆StrCopy(pstr, @str);
銆銆銆銆銆銆Write(pstr);
銆銆銆銆銆銆FreeMem(pstr);
銆銆銆銆end;
銆銆鍏佸嚱鏁版寚閽堛傚湪鍔ㄦ佽皟鐢―LL涓殑鍑芥暟鏃訛紝灝變細(xì)鐢ㄥ埌鍑芥暟鎸囬拡銆傚亣璁劇敤C鍐欑殑涓孌典唬鐮佸涓嬶細(xì)
銆銆銆銆typedef int (*PVFN)(int); //瀹氫箟鍑芥暟鎸囬拡綾誨瀷
銆銆銆銆int main()
銆銆銆銆{
銆銆銆銆銆銆HMODULE hModule = LoadLibrary("test.dll");
銆銆銆銆銆銆PVFN pvfn = NULL;
銆銆銆銆銆銆pvfn = (PVFN) GetProcAddress(hModule, "Function1");
銆銆銆銆銆銆pvfn(2);
銆銆銆銆銆銆FreeLibrary(hModule);
銆銆銆銆}
銆銆銆銆灝辨垜涓漢鎰熻鏉ヨ錛孋璇█涓畾涔夊嚱鏁版寚閽堢被鍨嬬殑typedef浠g爜鐨勮娉曟湁浜涙櫐娑╋紝鑰屽悓鏍風(fēng)殑浠g爜鍦?Object Pascal涓嵈闈炲父鏄撴噦錛?
銆銆銆銆type PVFN = Function (para : Integer) : Integer;
銆銆銆銆var fn : PVFN;
銆銆銆銆銆銆//涔熷彲浠ョ洿鎺ュ湪姝ゅ瀹氫箟錛屽錛歠n : function (para:Integer):Integer;
銆銆銆銆銆銆hm : HMODULE;
銆銆銆銆begin
銆銆銆銆銆銆hm := LoadLibrary('test.dll');
銆銆銆銆銆銆fn := GetProcAddress(hm, 'Function1');
銆銆銆銆銆銆fn(2);
銆銆銆銆銆銆FreeLibrary(hm);
銆銆銆銆end;