您現在的位置是:首頁 > 手機遊戲首頁手機遊戲
全域性陣列變數傳遞(支援靜態與動態)
- 2022-04-06
陣列如何傳引數
以下內容
轉載
自按鍵精靈開發者:紫貓
感謝大大的支援與熱心分享!
按鍵精靈2014版已支援陣列全域性變量了,也就意味著以後多執行緒不需要再借助外掛或字串來傳遞陣列內容了,不過靜態陣列與動態陣列的用法還是稍微不同,具體例子如下:
Global 靜態陣列(2), 動態陣列
靜態陣列(0) = “紫貓”
靜態陣列(1) = “老師”
靜態陣列(2) = “好帥”
動態陣列 = Array(“紫貓”, “程式設計”, “學院”)
//注意, 啟動多執行緒的引數是沒有括號的, 也就是不能填寫BeginThread(多執行緒())!
TID = BeginThread(多執行緒)
//等待多執行緒執行修改陣列內容
Delay 1000
//主執行緒中靜態陣列也可以直接使用, 並且獲取到修改後的值!!!
TracePrint “被修改後的靜態陣列: ” & 靜態陣列(0) & “ ” & 靜態陣列(1) & “ ” & 靜態陣列(2)
//但是定義全域性變數的動態陣列無法直接輸出, 會報錯!!!
TracePrint “主執行緒的動態陣列內容如下: ” & 動態陣列(0) & “ ” & 動態陣列(1) & “ ” & 動態陣列(2)
//必須要透過賦值給一個變數, 再使用這個變數來輸出動態陣列內容!!!
Dim 陣列
陣列 = 動態陣列
TracePrint “被修改後的動態陣列: ” & 陣列(0) & “ ” & 陣列(1) & “ ” & 陣列(2)
Sub 多執行緒()
TracePrint “啟動多執行緒。。。”
//下面的靜態陣列可以直接傳遞輸出不會報錯
TracePrint “靜態陣列內容如下: ” & 靜態陣列(0) & “ ” & 靜態陣列(1) & “ ” & 靜態陣列(2)
//修改後的值也可以直接傳遞, 見主執行緒裡的輸出
靜態陣列(0) = “修改靜態陣列”
//下面的動態陣列如果直接傳遞會報錯的!!!
TracePrint “原動態陣列內容如下: ” & 動態陣列(0) & “ ” & 動態陣列(1) & “ ” & 動態陣列(2)
//必須要透過賦值給一個變數, 再使用這個變數來輸出動態陣列內容!!!
Dim Arr
Arr = 動態陣列
TracePrint “Arr陣列內容如下: ” & Arr(0) & “ ” & Arr(1) & “ ” & Arr(2)
//如果修改了這個動態陣列後想更新到全域性變數中, 則必須重新賦值給全域性動態陣列變數, 否則無法更新全域性變數值
Arr(0) = “修改動態陣列”
動態陣列 = Arr
//而且神奇的是靜態陣列的資料型別是Empty, 動態陣列的資料型別是Variant()
TracePrint VarType(靜態陣列)
TracePrint VarType(動態陣列)
End Sub
由於動態陣列在多執行緒中取值與賦值不方便, 特別是賦值還容易造成執行緒衝突, 故不是特別推薦使用, 如果一定要用的話, 可以考慮使用下面例子中的getDynArr()和setDynArr()兩個函式來實現。
Global 動態陣列
動態陣列 = Array(“紫貓”, “程式設計”, “學院”)
TracePrint “主執行緒, 陣列全部內容:” & join(動態陣列, “, ”)
TracePrint “主執行緒, 修改前: ” & getDynArr(動態陣列, 1)
動態陣列 = setDynArr(動態陣列, 1, “老師”)
TracePrint “主執行緒, 修改後: ” & getDynArr(動態陣列, 1)
BeginThread 多執行緒
Delay 1000
TracePrint “主執行緒, 執行緒修改後陣列全部內容: ” & join(動態陣列, “, ”)
/**********
* 函式 getDynArr
* 功能 獲取全域性動態陣列或環境動態陣列的元素值
* 原型 元素值 = getDynArr(動態陣列, 下標)
* 引數 動態陣列, 陣列型, 動態陣列變數
* 引數 下標, 整數型, 動態陣列下標
* 返回 動態陣列的元素值
**********/
Function getDynArr(動態陣列, 下標)
getDynArr = 動態陣列(下標)
End Function
/**********
* 函式 setDynArr
* 功能 修改全域性動態陣列或環境動態陣列的元素值
* 原型 動態陣列 = setDynArr(動態陣列, 下標, 內容)
* 引數 動態陣列, 陣列型, 動態陣列變數
* 引數 下標, 整數型, 動態陣列下標
* 引數 內容, 任意型別, 新的內容
* 返回 新的動態陣列
**********/
Function setDynArr(動態陣列, 下標, 內容)
動態陣列(下標) = 內容
setDynArr = 動態陣列
End Function
Sub 多執行緒()
TracePrint “多執行緒, 陣列全部內容:” & join(動態陣列, “, ”)
TracePrint “多執行緒, 修改前: ” & getDynArr(動態陣列, 2)
動態陣列 = setDynArr(動態陣列, 2, “真帥”)
TracePrint “多執行緒, 修改後: ” & getDynArr(動態陣列, 2)
End Sub
總結:
在全域性變數或環境變數中,靜態陣列比動態陣列更加使用方便。
靜態陣列不需要做任何特殊處理,以前怎麼用,多執行緒裡就怎麼用。
要獲取全域性或環境變數的動態陣列,必須要透過賦值給另一個變數後,使用該變數取值。
如果要更新全域性或環境變數的動態陣列,則必須要對動態陣列重新賦值。
多執行緒中使用全域性變數或環境變數時,要避免同時對同一個資料進行同時修改或同時修改並讀取,否則容易出現崩潰。
更多精彩內容,歡迎關注
微信公眾號:按鍵精靈公眾號
按鍵精靈論壇:bbs.anjian.com