• 2

{求救} C#高手有關THREAD的問題...

class g
{
public static int p[] = new int[n]
public static int px[] = new int[n]

}

//如果我有兩個函式他們
各會創造出矩陣
public void first()
{
for(int i = 0;i<6;i++)
{
//內容
}



}


}
public void second()
{
for(int i = 6;i>0;i--)
{
//內容
}

}

//分別是
p[1]=-1 p[2]=1 p[3]=2 p[4]=-1 p[5]= -1 p[6]=3
px[1]=2 px[2]=3 px[3]=6 px[4]=-1 px[5]= -1 px[6]=-1

//我想要在同時運算並且利用 p[3]=2 ,px[2]=3,在那兩個函式運行到一半的時候就會停止。


//因為我要平行運算所以要使用Thread



//那我現在用一個按鍵觸發
private void button1_Click(object sender, EventArgs e)
{
·
XXX();
}
·
public void XXX()
·
{
Thread thread1=new Thread(first);
Thread thread2=new Thread(second);

thread1.Start();thread2.Start();
while(){
for(nit i = 0 ; i<6 ;i++)
{
if(g.p[g.px]=i)
{
//用此內容來停止函式
MessageBox.Show("END")};

}

}
}
可是以上跑不出來
,我是想要first和second一起跑,因為不斷檢查p[]和px[]的關係,所以兩個函式沒跑完就可以停止跳出來,請問一下我這樣是哪裡有問題???
我是新手= ="""請多多包涵...

2010-12-21 11:33 發佈

onus wrote:
class g

{...(恕刪)

我問一下手槍伯他會不會寫程式
本來就是一場戲,咱們繼續看下去。

onus wrote:
class g{pu...(恕刪)


詞不達意
加上很多語法錯誤
真的很難幫你
善用除錯工具吧
那可以請教一下是那有錯嗎= ="" 謝謝

就是我想要firsts和econd他們同時運算,然後各自存資料到p[]和px[]

一存進去就比較,如果發生p[px[i]]=i,就將函式停止。

我之前有試著將判斷停止條件放入first和second,只是thread在執行的時候跟另外執行緒好像是獨立的,所以可能讀不到,

例如first判斷就讀不到px[],因為px[]需要second來寫入。



所以我將判斷停止的if寫在外面。

所以沒有辦法在兩條執行緒同時運算時,然後在他們存入外面的一個共通的class,一存入就判斷停就是否符合,接著停止那兩個函式嗎?



C#的多執行緒可以暫時停止等待另一個執行續的運作......等一堆交互處理

你的情況就是A或B看誰先做到就等對方...然後一起停止跳出

多看一下Help 你說的東西裡面都有也有範例

寫程式沒debug那會進步啊
我有去查MSDN 只是我查不太到我的問題在哪..

我知道有很多交互處理的動作sleep(),join()....
只是好像用不上,我的問題好像卡在說兩個函式同時運作時,他們各自存入p[]和px[]時要比較,
可是我卻無法去比較。

謝謝
這裡是01閒聊版
不是<s>什麼亂七八糟的網站</s>藍色小舖,StackOverflow
在這裡問是不會有正經回答的
底下這三篇先去看看練基本功
至於你的問題,我只能說 加油,好嗎?
http://tw.myblog.yahoo.com/gs_adoph/article?mid=283
http://tw.myblog.yahoo.com/gs_adoph/article?mid=287
http://tw.myblog.yahoo.com/gs_adoph/article?mid=291
使用全域變數
在first跟second裡寫判斷
當執行到要暫停的地方時
更改全域變數的值..
這樣應該ok吧
不過我沒試過..
我想到的笨方法
有興趣參考看看~


皮小哥 wrote:
使用全域變數
在fi...(恕刪)


如皮小哥說的用全域變數控制,


bool g_fisrt_flag=false;
bool g_second_flag=false;
int g_A_value;
int g_B_value;
first()
{
...
for (i=0;i<6;i++)
{
fisrt_flag=false;
...
//算出來A_value=xx 等另一支function的結果
....

//更動secord 的flag
second_flag=true;

//sleep 等另一個function run 完
while (fisrt_flag==false)
{thread.sleep(1000);}

//進行比對,符合的話 離開first
//不符合 for loop 跑下一個值
if (A_value==B_value)
{....}

}
...
}


second()
{
...
for (i=0;i<6;i++)
{
second_flag=false;
...
//算出來A_value=xx 等另一支function的結果

//更動first 的flag
first_flag=true;

//sleep 等另一個function run 完
while (second_flag==false)
{thread.sleep(1000);}

//進行比對,符合的話 離開second
//不符合 for loop 跑下一個值
if (A_value==B_value)
{....}

}
...
}
藥醫不死病,佛渡有緣人
不會C#....AutoIt

不就是 矩陣A[矩陣B[I]] = I .... 怎麼會用到同時執行的問題?
太深奧了...

Global $P[7],$Px[7]
Global $Var = 0
Do
For $i = 1 to 6
$P[$i] = Random(1, 6, 1)
$Px[$i] = Random(1, 6, 1)
ConsoleWrite("P:["&$i&"] = "&$P[$i]&@CRLF)
ConsoleWrite("Px:["&$i&"] = "&$Px[$i]&@CRLF)
Next

For $i = 1 to 6
if $P[$Px[$i]] = $i Then
$Var = 1
ExitLoop
EndIf
Next

Until $Var = 1
MsgBox(64,"END","P:["&$i&"] "&" : "&"Px:["&$i&"] ")
  • 2
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?