C 的tick和執行緒問題

2021-05-24 23:38:54 字數 491 閱讀 9221

.net一共有3個timer: 

1.   system.windows.forms.timer: 

這是你說的(因為有tick事件)。是通過windows訊息出發ontimer事件的,tick事件總是觸發在程式的主線程(uithread)上(1.   不是新執行緒)。如果主線程忙(例如,上一次的tick還沒有執行完),訊息就得不到及時處理(2.   等待前乙個完成)。 

2.   system.timer.timer和system.threading.timer: 

前者是通過呼叫windows的waitabletimer實現的,後者是.net的簡單的thread.sleep實現。兩個實現都是用了.net執行緒池(threadpool),所以elapsed事件會在threadpool裡選擇乙個執行緒執行(1.   不一定是新執行緒,但肯定不是建立timer的執行緒)。這樣做的好處是如果前一次elapsed沒有完成,後一次的可以從threadpool裡選乙個新的執行緒開始執行。(2.   在新執行緒上直接開始)。

前台執行緒和後台執行緒的問題

執行緒按照結束方式來說,分為前台執行緒和後台執行緒 乙個應用程式執行,會啟動乙個程序,這個程序擁有多個執行緒,其中可能有前台執行緒,也有後台執行緒。只有所有的前台執行緒都結束了,系統才會解除安裝應用程式域,也就是說,停止該程序,該程序占用的記憶體等資源。後台執行緒必須依附於某個前台執行緒,不能單獨存...

c 的前台執行緒和後台執行緒

1.執行緒分類 執行緒由程式設計師建立,可是建立的方式不同,總體來說有兩種,一種是個人構造,也就是使用thread類new執行緒物件建立,這一類執行緒是大部分程式設計師知道的,也叫專用線程 還有一種是由clr建立,這一類執行緒主要存在於執行緒池中,也叫執行緒池執行緒。對於這兩種執行緒的好壞,個人建議...

C 多執行緒執行緒同步問題

程序通常被定義為乙個正在執行的程式的例項,是乙個程式在其自身位址空間中的一次執行活動。程序從來不執行任何東西,它是執行緒的容器。若要程序完成某項操作它必須擁有乙個在它的環境中執行的執行緒,此執行緒負責包含執行包含在程序位址空間中的 現存由執行緒的核心物件和執行緒棧兩部分組成。作業系統用執行緒的核心物...