史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 程式語言討論區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2005-06-28, 10:32 AM   #1
mini
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時
註冊日期: 2002-12-07
文章: 13343
精華: 0
現金: 26452 金幣
資產: 3024312 金幣
預設 多執行序設計

多執行序(或寫作 多執行緒) 對岸稱 多線程
是一個 多工的觀念
傳統程式設計都是依序處理 依序抉擇
上一條指令未處理完
下一條指令就無法執行
當您的程式設計有用到
下一條指令 無須在意 上一條指令 之狀況時
多執行序 就是一項選擇

VB 原則上不提供 "關鍵字 for 多執行序" (但可用 WinAPI 來實作)
但 Timer 個人覺得是一個類似 多執行序 的設計
只是要用 Timer 來完全實現多執行序,那表示您必須有兩個以上的 Timer
這裡就不多做揣摩

那 WinAPI 又是如何來實作呢?
大多會談到使用 CreateThread、TerminateThread、ResumeThread、SuspendThread ...

用 CreateThread 創建執行序
如不是立即執行就需用 ResumeThread 啟動(對岸稱 激活)
用 SuspendThread 暫停
用 TerminateThread 終結釋放資源

那程式上的寫作
首先要做一個 執行序涵式(sub、function)
再來是做一個 類別
最後用主程序 來應用之

為何會需要 類別 呢?
直接用 CreateThread 指向 執行序涵式 的話
會得到一個錯誤 (可能是 不可逾期 或 記憶體不能write ...等)
原因在於 涵式 編寫編譯時(主程序如有用到) 就已經是一個存在了
何來 "再創建" 之說呢?

因此會用 類別 方式
在類別內創建一個 執行序涵式
這也是 類別 的作用(動態創建、繼承、模版)

在程序內用 new類別 來實現類別
此時 的 (執行序)涵式 是隸屬於兩個個體 (也就是說 主程序 也可以使用 該涵式)
但其 資源卻只有一份
有點搞昏了嗎?
簡言之就是 執行序 是一觸發體 需要觸發對象

設計上必須注意的是
執行序涵式 與 主程序間 的同步問題(如不需那當然最好辦)
執行序涵式(類) 的 終結,因為其很可能不會因主程序終結而終結
執行序涵式 的獨佔問題,其內的迴圈設計要特別小心,因此 DoEvents 時常是必要的
執行序涵式 的 容錯問題

這裡有個示範有興趣的朋友可以看看
http://www.ddvip.net/program/vb/index1/441.htm
mini 目前離線  
送花文章: 2013, 收花文章: 8002 篇, 收花: 26806 次
回覆時引用此帖
舊 2005-07-01, 09:16 AM   #2 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時
註冊日期: 2002-12-07
文章: 13343
精華: 0
現金: 26452 金幣
資產: 3024312 金幣
預設

再來補充一些應用面思維

前面提到
下一條指令 無須在意 上一條指令 之狀況時

那哪些應用可符合呢?
比如
即時遊戲 畫面外的處理
背景畫面與前景畫面
真實環境模擬
...

舉個實例
比如 要做一Virsual 動畫 其需要做大量的運算
而運算之數據是由 變數 來提供
畫面之改變是參考 變數

當不想因為 處理畫面 而拖累 運算
此時可將 處理畫面 與 運算 分成兩個執行序
我們將 處理畫面 宣告一個 執行序涵式
運算 是主程式執行序

所以成就 運算 為主
處理 參考 主程式變數
之結構


以上希望大家還聽的懂說 ^^
mini 目前離線  
送花文章: 2013, 收花文章: 8002 篇, 收花: 26806 次
回覆時引用此帖
舊 2005-07-14, 11:33 PM   #3 (permalink)
siwen
榮譽勳章

勳章總數
UID -
在線等級:
文章: n/a
精華:
預設

現在vb.net
可以不用call API 就可以達成多執行緒的功能
樓主說的很不錯
多執行緒其實很簡單就是可以讓你的程式不會像掛在那邊
主程式還可以跑
 
送花文章: 0, 收花文章: 0 篇, 收花: 0 次
回覆時引用此帖
舊 2005-07-15, 04:22 PM   #4 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時
註冊日期: 2002-12-07
文章: 13343
精華: 0
現金: 26452 金幣
資產: 3024312 金幣
預設

只可惜 .NET 至目前還是很少成品 (可能是需要 .Net Framework執行環境,而Framework又不是必備安裝服務吧)
http://www.iiiedu.org.tw/knowledge/k...20021030_2.htm

歡迎 siwen 舉例或發言 .NET 的相關實作或觀念 ^^
mini 目前離線  
送花文章: 2013, 收花文章: 8002 篇, 收花: 26806 次
回覆時引用此帖
舊 2005-08-02, 02:19 PM   #5 (permalink)
長老會員
 
cwvdavid 的頭像
榮譽勳章
UID - 476
在線等級: 級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時
註冊日期: 2002-12-06
住址: 天與地的夾縫
文章: 3106
精華: 0
現金: 5256 金幣
資產: 2034465 金幣
預設

呼叫執行緒來執行的範例...

Private Sub PrintYearReport() '呼叫執行緒 列印年報表
Dim MyThreadStart As New System.Threading.ThreadStart(AddressOf RunYearReportPrint)
Dim MyWorkerThread As New System.Threading.Thread(MyThreadStart)
MyWorkerThread.Start()
End Sub

Private Sub RunYearReportPrint() '列印年報表
....這裡是一般要執行的事情...
End Sub

======================
正常的寫法是直接執行RunYearReportPrint()

如果呼叫後會執行非常久...而影響到使用者...
那就是改為執行PrintYearReport()
(讓執行緒來執行RunYearReportPrint())...
cwvdavid 目前離線  
送花文章: 4036, 收花文章: 2466 篇, 收花: 10141 次
回覆時引用此帖
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 01:12 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1