C 前台執行緒和後台執行緒

2022-06-17 09:24:15 字數 2378 閱讀 4312

程序會等待所有的前台執行緒完成後再結束本工作;但是如果只剩下後台執行緒,則會直接結束本工作,不會等待後台執行緒完成後再結束本工作。

1 new thread建立的執行緒

預設情況下使用new thread()方法建立的執行緒為前台執行緒,可以通過手動設定isbackground屬性來建立乙個後台執行緒;

預設前台執行緒示例:

#region thread前後臺執行緒測試

public

static

void

backgroundtest()

is background:

",thread.currentthread.managedthreadid,thread.currentthread.isbackground));

}});

//new thread建立的執行緒預設為前台執行緒,會一直執行直到結束

thread1.start();

}#endregion

測試**如下:

static

void main(string

args)

is background:

", thread.currentthread.managedthreadid, thread.currentthread.isbackground));

console.writeline(

"main ok");

}

執行結果:

把執行緒修改為後台執行緒測試,後台執行緒**如下:

這時候,再重新執行測試**,會發現,main方法執行完後程式後立即退出結束,因為這時候只有乙個前台執行緒即main方法,當main方法執行完後,會立即結束所有的後台執行緒的執行;

2 執行緒池

c#執行緒池中的工作執行緒預設都是後台執行緒,這意味著當所有的前台執行緒完成後,所有的後台執行緒將停止工作;但是可以通過設定修改為前台執行緒

thread.currentthread.isbackground = false;

public

static

void

threadpoomethod()

is background:

", thread.currentthread.managedthreadid, thread.currentthread.isbackground));

}});

}

主線程測試**如下:

static

void main(string

args)

is background:

", thread.currentthread.managedthreadid, thread.currentthread.isbackground));

thread.sleep(

3 * 1000

); console.writeline(

"main ok");

}

程式的執行結果是:執行緒池裡的threadpoomethod執行了3秒鐘後,程式會結束執行,因為作為唯一前台執行緒的主線程只會運3秒,main方法執行結束後執行緒池裡的工作執行緒會停止執行;

3 task

對於使用任務task,一般來說是使用執行緒池作為後台執行緒;

可以使用thread.currentthread.isbackground = false;改為前台執行緒

這時執行結果如下:

程式會一直執行下去。

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

前台執行緒 在主線程執行結束後,若前台執行緒沒有執行完則會阻止主線程的關閉 後台執行緒 在主線程執行結束後,整個執行緒會結束 class threadsample public void countnumbers prints thread.currentthread.name,i static v...

前台執行緒和後台執行緒

net的公用語言執行時 common language runtime,clr 能區分兩種不同型別的執行緒 前台執行緒和後台執行緒。這兩者的區別就是 應用程式必須執行完所有的前台執行緒才可以退出 而對於後台執行緒,應用程式則可以不考慮其是否已經執行完畢而直接退出,所有的後台執行緒在應用程式退出時都會...

c 前台和後台執行緒

net的公用語言執行時 common language runtime,clr 能區分兩種不同型別的執行緒 前台執行緒和後台執行緒。這兩者的區別就是 應用程式必須執行完所有的前台執行緒才可以退出 而對於後台執行緒,應用程式則可以不考慮其是否已經執行完畢而直接退出,所有的後台執行緒在應用程式退出時都會...