關於多執行緒傳參問題

2021-05-22 23:29:12 字數 1312 閱讀 2128

## 無引數

我們都知道使用多執行緒最簡單的方式是下面這樣:

**void

somemethod()

void

createthread()

##乙個引數

但是如果要是想給somemethod方法傳入引數的話,發現這種方法不好用了

因為thread類並不支援這樣

但是為了解決這個問題,類庫中提供了乙個支援的**

使用它可以支援傳入乙個引數.注意,是僅僅乙個!!

使用以下方法實現

但是假如有多個引數就遇到麻煩了,上述方法只允許乙個引數.

**void

somemethod(

object

arg)

void

createthread()

##多個引數

我們有兩種方法:

1. 新建乙個內部類,包裝所有的引數,然後傳入這個內部類的乙個例項,如下: 

**void

somemethod(

object

myargs)

void

createthread()

private

class

myargs

set}

myargs(

string

hellostring)}

2. 呼叫方法需要使用的引數存在此方法的類中,**示例如下:

**public

class

mythreadhelper 

set}

//包含引數的建構函式

public

mythreadhelper(

string

hellostring)

//要丟給執行緒執行的方法,本處無返回型別就是為了能讓threadstart來呼叫

public

void

somemethod() 

}void

createthread()

3.  直接在threadstart建構函式中新增**,這種方法不用考慮引數的個數 (感謝 qianlifeng)

**如下:

threadstart starter 

=delegate

;new

thread(starter).start();

##結束

至此,多執行緒傳不同個數(零到多個)引數都有了解決辦法.

要傳引數,也可以這樣用:

threadstart ts = new threadstart(delegate );

關於多執行緒傳參問題

無引數 我們都知道使用多執行緒最簡單的方式是下面這樣 void somemethod void createthread 乙個引數 但是如果要是想給somemethod方法傳入引數的話,發現這種方法不好用了 因為thread類並不支援這樣 但是為了解決這個問題,類庫中提供了乙個支援的 使用它可以支援...

關於多執行緒傳參問題

無引數 我們都知道使用多執行緒最簡單的方式是下面這樣 void somemethod void createthread 乙個引數 但是如果要是想給somemethod方法傳入引數的話,發現這種方法不好用了 因為thread類並不支援這樣 但是為了解決這個問題,類庫中提供了乙個支援的 使用它可以支援...

多執行緒傳參

1.要避免的陷阱 1 用detach 時,如果主線程先結束,變數就會被 所以用detach 的話,不推薦用引用,同時絕對不能用指標。include include using namespace std void myprint const int i,char pmybuf intmain 2 在...