多執行緒寫檔案執行緒掛起的問題
1樓:網友
waitforsingleobject你的呼叫方式死infinite無限等待模式,因為你所等待的事件沒有被啟用,所以肯定阻塞嘛。
你說你這段函式是**程函式的部分**,那有問題了,事件一定是全域性建立或是能夠被所有執行緒訪問到的記憶體, 應該是你引用的乙個靜態變數吧,你這樣的寫法會讓每個執行緒去建立一次事件而且都往乙個地方賦值。
waitforsingleobject 其實就是幾個人排隊上乙個廁所,廁所指示燈只有乙個,大家都是看著這個燈進廁所的,不會出現讓排隊的人給廁所裝燈泡。
2樓:網友
呼叫執行緒」是怎麼乙個概念。
這點**分析不出太多問題。不過肯定會出的問題就是你在多個執行緒裡同時對檔案的同乙個位置寫入造成writefile返回0,而你又沒具體判斷是什麼錯誤,依然繼續等待操作結束。這個必然會鎖死。
另外event每個執行緒建乙個就夠了,不用每次用的時候現建。
你這這樣解決相當於根本不寫那個waitforsingleobject,就是說這種方法是錯的b
你現在應該首先確認writefile是不是發生錯誤了。getlasterror() 用overlapped讀寫本來也就必須判斷writefile的last error。
另外其實你寫檔案用非同步幹什麼b 非同步是寫慢速裝置用的bb
掛起,掛起執行緒,這個掛起是個什麼意思
3樓:草原上之狼
本來執行緒是佔用cpu資源的,但是如果掛起的話,操作系旅隱統就不給這個現成悉粗分配cpu資源,除非以後再恢復,所以執行緒掛起的作用就是節拆陸廳省cpu資源,最根本的。
執行緒掛起的問題
4樓:
的確是死鎖, 訪問臨界區時發生的死鎖。
是不是是正在離開臨界區資源的執行緒被掛起, 導致別的活動執行緒無法進入臨界區?(猜的。
printf有可能會獲得某些資源, 而這些資源正是臨界區的, 如果把printf從proc裡移走貌似一切正常, 比如。
int g_n = 0;
dword winapi proc(lpvoid param)return 1;
int main()
for(int i = 0; i < 10; i++)sleep(1000);
for(int j = 0; j < 8; j++)suspendthread(hthread[j]);
while(1)
這裡設定斷點可以檢視執行緒情況。
return 0;
樓主試試?另外執行緒我也不是很懂, 見笑了:)
執行緒掛起 什麼作用?
5樓:歸悅欣
執行緒是靠cpu來執行的,cpu要執行乙個執行緒(不說別的)最起碼就是要佔用cpu時間,象windows這樣的多工作業系統,可以允許多個執行緒同時執行,所謂的同時執行並不是真正的同時執行,而是輪流執行不同的執行緒,因為cpu速度很快,如果執行緒不是很多,就會給使用者有所有執行緒在同時執行的錯覺。舉個例子,系統中有10個執行緒要執行,如果要求在1秒內所有的執行緒都執行一遍,則每個執行緒可執行時間為10分之一秒,也就是如果乙個執行緒已經執行了10分之一秒,系統會停止該執行緒(或稱為掛起該執行緒),執行下乙個執行緒,當又輪到掛起的執行緒執行時,系統會從該執行緒停止的地方執行,這種執行緒掛起是由系統進行的,即所謂的執行緒排程。有時候,我們的執行緒暫時沒有資料處理,我們也可以通過一些api來使自己的執行緒掛起,當系統檢測到執行緒被使用者掛起時,就算輪到該執行緒系統也不會執行該執行緒,而是直接去執行下乙個執行緒,這種情況下,除非使用者使該執行緒退出掛起狀態,否則系統不會執行該執行緒。
6樓:網友
本來執行緒是佔用cpu資源的,但是如果掛起的話,作業系統就不給這個現成分配cpu資源,除非以後再恢復,所以執行緒掛起的作用就是節省cpu資源,最根本的。
7樓:網友
該執行緒暫時不參與cpu時間片分配,相當於延續掛起前操作n毫秒。比如掛起蜂蜜器執行緒10毫秒,相當於蜂鳴器連續響10s,不發生變化。用sleep()函式實現,引數是想要掛起的毫秒數。
c#中streamwrite 建立乙個寫入檔案流,在乙個後臺thread執行緒裡,只有結束執行緒才能看見文件內容?
8樓:超大蒲公英
streamwrite他有乙個flush方法,在寫完一行之後呼叫一下就可以了。
關於c#執行緒的掛起與恢復的問題
9樓:為小學生代眼
執行緒的掛起與恢復,不推薦使用thread..
和thread..方法。你可以通過autoresetevent
來控制掛起和恢復,用sleep來暫停執行緒執行。
autoresetevent 允許執行緒通過發訊號互相通訊。通常,此通訊涉及執行緒需要獨佔訪問的資源。
執行緒通過呼叫 autoresetevent 上的。
waitone 來等待訊號。如果 autoresetevent 處於非終止狀態,則該執行緒阻塞,並等待當前控制資源的執行緒。
通過呼叫 set 發出資源可用的訊號。
呼叫 set 向 autoresetevent 發訊號以釋放等待執行緒。autoresetevent 將保持終止狀態,直到乙個正在等待的執行緒被釋放,然後自動返回非終止狀態。如果沒有任何執行緒在等待,則狀態將無限期地保持為終止狀態。
可以通過將乙個布林值傳遞給建構函式來控制 autoresetevent 的初始狀態,如果初始狀態為終止狀態,則為。
true;否則為 false。
通俗的來講只有等成功執行後,才能夠獲得執行機會;set是發訊號,waitone是等待訊號,只有發了訊號,等待的才會執行。如果不發的話,waitone後面的程式就永遠不會執行。
class class1
else }}
public static void begin()
public static void end()
class program
for (int i = 0; i < 10; i++)
+ "狀態:" +
應用掛起,執行緒狀態為waiting on condition,請問怎麼解決
10樓:微薇
執行緒掛起是指因為需要等待其他的資源,暫時終止執行緒的執行。當執行緒獲取到了需要的資源後會自動的再次執行。
執行緒阻止是,有意控制執行緒停止。知道顯示的明確該執行緒再去啟動時,才會繼續執行。區別是乙個作業系統控制,乙個**邏輯控制;
執行緒的掛起,可能導致死鎖的發生 查詢造成等待的原因,對於檔案操作,可以首先看看是不是檔案讀寫有鎖造成的等待。
VC 多執行緒,c 多執行緒問題
當多個執行緒訪問乙個獨占性共享資源時,可以使用 臨界區 物件。任一時刻只有乙個執行緒可以擁有臨界區物件,擁有臨界區的執行緒可以訪問被保護起來的資源或 段,其他希望進入臨界區的執行緒將被掛起等待,直到擁有臨界區的執行緒放棄臨界區時為止,這樣就保證了不會在同一時刻出現多個執行緒訪問共享資源。ccriti...
c多執行緒操作控制元件問題,C 多執行緒操作控制元件問題
一樓的答案不僅不是正解,而且還會報錯!正確的做法如下 thread th new thread new threadstart th.isbackground true 一定要標記為後臺執行緒,這樣這個執行緒才能在你的主執行緒停止後自動停止 th.start 總之一句話,繁瑣的業務操作放在非主執行緒...
java網路程式設計多執行緒問題,java網路程式設計多執行緒問題
建立執行緒有兩種方法 繼承thread類和實現runnable介面。方法一 繼承 thread 類,覆蓋方法 run 我們在建立的 thread 類的子類中重寫 run 加入執行緒所要執行的 即可。下面是乙個例子 public class mythread extends thread public...