2009-08-14 37 views
0

SO用戶被中斷,.Multithreading淨 - 實現選擇的碼不通過螺紋

我有3個線程在任何給定的時間同時運行時,麻煩的是螺紋後1次試圖通過使用戶名它連接到一臺服務器線程2正在被調用,當它的線程1轉到服務器關閉它的代碼連接時。

有什麼地方可以實現同時發送用戶名和密碼,此時中斷對方的線程?

THX! 尼迪

+0

我認爲你需要解釋一下這個問題。不同的線程是否與服務器共享一個連接? – 2009-08-14 19:16:57

+0

你想讓多個線程同時連接到服務器嗎?(Web瀏覽器經常打開多個連接到同一個服務器來同時加載大量的東西。)或者你想一次只有一個線程來聯繫服務器? – 2009-08-14 19:21:54

+0

在剛剛發佈的代碼中,您是TelnetConnectorThreads [countofThreads]中的creatin ga線程,然後嘗試啓動TelnetConnectorThreads [intIndex](請注意索引變量) – cyberconte 2009-08-14 20:02:21

回答

5

我很懷疑它的真正線程爭是這裏的問題。

線程時間片非常快,服務器必須有一個可笑的短期超時爲您的診斷是正確的。

我的猜測是你的代碼有一些不同的錯誤,但我們不能確定它是什麼,沒有看到一些代碼。

+1

雖然您的答案沒有解決我的問題,但您的多線程文章 - http://www.yoda.arachsys.com/csharp/threads/locking.shtml 謝謝! – Nidhi 2009-08-14 20:07:36

+1

你能說你如何解決這個問題嗎? – 2009-08-14 23:23:39

+0

是的,我甚至想知道問題是如何解決的。 – 2009-08-15 01:11:57

1

線程通常交換的毫秒數量級,所以我不認爲這是什麼導致您的程序斷開連接。這就是說,你可以實現鎖/互斥鎖,以確保在沒有其他線程執行其代碼的情況下執行關鍵代碼,甚至可以使用線程優先級確保一個線程優先於其他線程 - 但是不能強制線程不屈服,操作系統可以決定你已經運行足夠長的時間,並且不管你是否屈服。此外,在所有現代時間表中,您所尋找的行爲或多或少地被阻止,以防止其他過程的匱乏。

1

它看起來像你試圖在一個套接字上覆用多個數據流。所以你可能會在等待服務器時遇到線程切換問題,但是如果是這種情況,你可能正在做這樣的事情,這是一種不適合多線程的方式。

void Task(int type) 
{ 
    // Authenticate 
    // Send Data 
    // Disconnect 
} 

// Connect 
Thread.Start(Task(1)); 
Thread.Start(Task(2)); 
Thread.Start(Task(3)); 

如果你有線程1,2,3串聯服務器上做工作,你有幾個方法可以做到這一點:

1)做你的工作有不同的線程連接

void Task(int type) 
{ 
    // Connect 
    // Authenticate 
    // Send Data 
    // Disconnect 
} 

Thread.Start(Task(1)); 
Thread.Start(Task(2)); 
Thread.Start(Task(3)); 

2)做你的工作與單線程一個連接

無效任務(整型) {// 發送數據 }

//連接 //鑑定 任務(1); 任務(2); 任務(3); //斷開

3)使用多個連接