當前位置:首頁 » 編程語言 » C語言return清理線程
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

C語言return清理線程

發布時間: 2022-09-10 20:01:16

A. c語言中return的用法疑問

要了解return的真正意義,首先要知道函數調用的原理。我不知道你對PC指針寄存器,狀態寄存器和運行時堆棧有多少了解,以下說明基於假設你了解這些術語的基礎上。

1. 程序裝載如內存,開始執行,CPU的PC指針寄存器指向程序的主入口第一句執行代碼。
2. 程序從主入口開始執行,並創建運行時堆棧。
3. CPU將PC指針遞增使得程序順序執行,CPU根據語句執行的結果修改狀態寄存器。
4. 當出現函數調用時,將當前的PC指針寄存器的值以及狀態寄存器的值壓入堆棧,然後將PC指針寄存器的值修改為即將被調用的函數的第一句執行代碼。
5. 程序開始執行被調用函數的代碼,CPU將PC指針遞增使得程序順序執行,CPU根據語句執行的結果修改狀態寄存器。
6. 當遇到return語句或函數自然結束時,CPU將之前壓入堆棧的PC指針寄存器和狀態寄存器的值彈出,並寫回到相應的寄存器中。
7. CPU開始繼續執行主函數後續的代碼。

下面對以上流程做一下解釋
PC指針寄存器中存儲的是一個內存地址,該地址中存儲著當前正在執行的代碼。通過修改這個寄存器的值可以達到跳轉到其代碼的效果。函數調用和if,switch,for等分支循環語句都是通過操縱PC寄存器來實現的,但函數調用與分支循環的差別在於,函數調用結束後需要返回到上一層函數的執行現場,繼續往下運行,這就需要在修改PC指針前將當前的PC指針保存好,一邊函數返回時回復,由於子函數又可以繼續調用其他函數,所以需要使用堆棧這種後進先出的數據結構去保存。

B. C語言線程如何終止

有三種方式可以終止線程,具體調用函數依賴於使用的線程系統。
1 在線程入口函數中,調用return。 即退出線程入口函數,可以實現終止當前線程效果;
2 在線程執行的任意函數,調用當前線程退出函數,可以退出當前線程;
3 在任意位置,調用線程終止函數,並傳入要終止線程的標識符,即pid,可以實現終止對應線程效果。

C. C語言如何終止線程

面只有兩個線程,是生產者/消費者模式,已編譯通過,注釋很詳細。

D. C語言中return用法(請熟練者進)

return是返回值,這個返回值是和函數的類型有關的,函數的類型是什麼,他的返回值就是什麼

比方主函數intmain()

{}這里就必須有一個return,只有void時可以不用返回值。

功能函數

intfun()

{

return1;

}

這個時候fun函數的作用就是返回一個int類型的值,可以直接拿來用比方inta=fun();

這里就相當於inta=1;

另外一個作用return後面的語句不會執行,我們可以用它來結束程序。

(4)C語言return清理線程擴展閱讀:

注意事項:

1、一個c程序由一個或多個程序模塊組成,每一個程序模塊作為一個源程序文件。對較大的程序,一般不希望把所有內容全放在一個文件中,而是將它們分別放在若干個源文件中,由若干個源程序文件組成一個c程序。這樣便於分別編寫和編譯,調高調試效率。一個源程序文件可以為多個c程序公用。

2、一個源程序文件由一個或多個函數以及其他有關內容(如指令,數據聲明與定義等)組成。一個源程序文件是一個編譯單位,子啊程序編譯時是以源程序文件為單位進行編譯的,而不是以函數為單位進行編譯的。

3、c程序的執行是從main函數開始的,如果在main函數中調用其他函數,在調用後流程返回main函數,在main函數中結束整個程序的進行。

E. 關於C語言中return的用法

一般來說,return函數的作用大多數表現在判斷一個函數是否成功完成,比如說你寫了一個很大的函數,當你在其他的程序中使用到這個函數的時候,一般的方法都要在使用它之後判斷一下函數是否執行成功,那麼如何判斷一個函數是否成功執行了呢?這就要求函數結尾return一個值,當調用這個函數之後得到的值是return的值,說明這個函數執行成功了,當然函數不一定必須在結尾返回,如果你想知道錯誤發生在函數的哪個位置,你也可以在各個部位定義其他的返回值用來描述這個錯誤
而return用來作為值的傳遞實在是一種為了方便的目的,由於return只能一次返回一個值,所以當你有多個參數要返回的時候,就需要用參數傳遞來解決,要不函數有參數合用,是吧

F. c語言中return()起什麼作用

關於C語言中return的一些總結
return是C++預定義的語句,它提供了種植函數執行的一種放大。當return語句提供了一個值時,這個值就成為函數的返回值.
說到return,有必要提及主函數的定義,下面是從網路上找到的資料,好好消化吧,對了解主函數中返回值的理解有很大的幫助.
很多人甚至市面上的一些書籍,都使用了voidmain(),其實這是錯誤的。C/C++中從來沒有定義過voidmain()。C++之父BjarneStroustrup在他的主頁上的FAQ中明確地寫著Thedefinitionvoidmain(){/*...*/}isnotandneverhasbeenC++,norhasitevenbeenC.(voidmain()從來就不存在於C++或者C)。下面我分別說一下C和C++標准中對main函數的定義。
1.C
在C89中,main()是可以接受的。BrianW.Kernighan和DennisM.Ritchie的經典巨著TheCprogrammingLanguage2e(《C程序設計語言第二版》)用的就是main()。不過在最新的C99標准中,只有以下兩種定義方式是正確的:
intmain(void)
intmain(intargc,char*argv[])
(參考資料:ISO/IEC9899:1999(E)Programminglanguages—C5.1.2.2.1Programstartup)
當然,我們也可以做一點小小的改動。例如:char*argv[]可以寫成char**argv;argv和argc可以改成別的變數名(如intval和charval),不過一定要符合變數的命名規則。
如果不需要從命令行中獲取參數,請用intmain(void);否則請用intmain(intargc,char*argv[])。
main函數的返回值類型必須是int,這樣返回值才能傳遞給程序的激活者(如操作系統)。
如果main函數的最後沒有寫return語句的話,C99規定編譯器要自動在生成的目標文件中(如exe文件)加入return0;,表示程序正常退出。不過,我還是建議你最好在main函數的最後加上return語句,雖然沒有這個必要,但這是一個好的習慣。注意,vc6不會在目標文件中加入return0;,大概是因為vc6是98年的產品,所以才不支持這個特性。現在明白我為什麼建議你最好加上return語句了吧!不過,gcc3.2(Linux下的C編譯器)會在生成的目標文件中加入return0;。
2.C++
C++98中定義了如下兩種main函數的定義方式:
intmain()
intmain(intargc,char*argv[])
(參考資料:ISO/IEC14882(1998-9-01)Programminglanguages—C++3.6Startandtermination)
intmain()等同於C99中的intmain(void);intmain(intargc,char*argv[])的用法也和C99中定義的一樣。同樣,main函數的返回值類型也必須是int。如果main函數的末尾沒寫return語句,C++98規定編譯器要自動在生成的目標文件中加入return0;。同樣,vc6也不支持這個特性,但是g++3.2(Linux下的C++編譯器)支持。
3.關於voidmain
在C和C++中,不接收任何參數也不返回任何信息的函數原型為「voidfoo(void);」。可能正是因為這個,所以很多人都誤認為如果不需要程序返回值時可以把main函數定義成voidmain(void)。然而這是錯誤的!main函數的返回值應該定義為int類型,C和C++標准中都是這樣規定的。雖然在一些編譯器中,voidmain可以通過編譯(如vc6),但並非所有編譯器都支持voidmain,因為標准中從來沒有定義過voidmain。g++3.2中如果main函數的返回值不是int類型,就根本通不過編譯。而gcc3.2則會發出警告。所以,如果你想你的程序擁有很好的可移植性,請一定要用intmain。
4.返回值的作用
main函數的返回值用於說明程序的退出狀態。如果返回0,則代表程序正常退出,否則代表程序異常退出。下面我們在winxp環境下做一個小實驗。首先編譯下面的程序:
intmain(void)
{
return0;
}
然後打開附件里的「命令提示符」,在命令行里運行剛才編譯好的可執行文件,然後輸入「echo%ERRORLEVEL%」,回車,就可以看到程序的返回值為0。假設剛才編譯好的文件是a.exe,如果輸入「a&&dir」,則會列出當前目錄下的文件夾和文件。但是如果改成「return-1」,或者別的非0值,重新編譯後輸入「a&&dir」,則dir不會執行。因為&&的含義是:如果&&前面的程序正常退出,則繼續執行&&後面的程序,否則不執行。也就是說,利用程序的返回值,我們可以控制要不要執行下一個程序。這就是intmain的好處。如果你有興趣,也可以把main函數的返回值類型改成非int類型(如float),重新編譯後執行「a&&dir」,看看會出現什麼情況,想想為什麼會出現那樣的情況。順便提一下,如果輸入a||dir的話,則表示如果a異常退出,則執行dir。
5.那麼intmain(intargc,char*argv[],char*envp[])呢?
這當然也不是標准C裡面定義的東西!char*envp[]是某些編譯器提供的擴展功能,用於獲取系統的環境變數。因為不是標准,所以並非所有編譯器都支持,故而移植性差,不推薦使用。
到了這里,你應該了解為什麼主函數定義為int返回類型,而且函數體裡面有return0;這個語句了吧.
下面具體說說我對return的應用的理解。
只要一個函數的返回值是數字型的,那麼就可以返回0(即return0),其實你返回多少都沒問題。一般情況下,C++做出來的函數都要求返回一個值,當函數執行正常,且達到了一般情況下的目的,那麼就返回0表示正確的調用了該函數,這個0就是返回給主調函數以通知沒有出錯的;如果函數調用中出錯,或者沒有按照一般情況執行,那麼就返回1,以告知主調函數採取響應策略;如果你在某個函數所在類的定義所在的頭文件中定義了一組狀態值(一般都是負整數),那麼函數就可以返回不同的值以告之主調函數具體發生了什麼異常或錯誤,這種情況一般用於函數功能獨立性較差的的情況。所以一般不鼓勵把函數返回類型定義為void,至少返回應該是int,而在函數的最後加上return0.語句:
intfunc(參數列表)
{
……
……
……
Return0;
}
在函數中,如果碰到return語句,那麼程序就會返回調用該函數的下一條語句執行,也就是說跳出函數的執行,回到原來的地方繼續執行下去。但是如果是在主函數中碰到return語句,那麼整個程序就會停止,退出程序的執行。
如果你定義一個函數有返回類型,可以想下面那樣調用:
intfunc()
{
intvalue;
……
……
……
returnvalue;
}
intmain()
{
intintvalue;
intvalue=func();
……
……
teturn0;
}
return語句後面具體是什麼內容,這就要具體情況具體分析了:
(1)在返回類型是char的函數中,return後應該是char類型的值;
(2)在返回類型是int的函數中,如果是要停止函數的調用,最好應該為0;其他的按照你的目的而定,只要是int類型就行了
(3)在返回類型是結構類型的函數中,return後應該是結構的一個實例對象。
總之,函數定義為什麼樣的返回類型,該函數中return後就應該是相應類型的值。

G. C語言如何終止線程

有三種方式可以終止線程,具體調用函數依賴於使用的線程系統。
1 在線程入口函數中,調用return。 即退出線程入口函數,可以實現終止當前線程效果;
2 在線程執行的任意函數,調用當前線程退出函數,可以退出當前線程;
3 在任意位置,調用線程終止函數,並傳入要終止線程的標識符,即pid,可以實現終止對應線程效果。

H. C語言如何終止線程

調用ExitThread函數。
該函數將終止線程的運行,並導致操作系統清除該線程使用的所有操作系統資源。但是,C++資源(如C++類對象)將不被撤消。
(3) 調用TerminateThread函數。
TerminateThread 能撤消任何線程。線程的內核對象的使用計數也被遞減。TerminateThread函數是非同步運行的函數。如果要確切地知道該線程已經終止運行,必須調用WaitForSingleObject或者類似的函數。當使用返回或調用ExitThread的方法撤消線程時,該線程的內存堆棧也被撤消。但是,如果使用TerminateThread,那麼在擁有線程的進程終止運行之前,系統不撤消該線程的堆棧。

I. c語言如何釋放一個被阻塞住的線程

  1. 可以用線程同步機制進行,比如使用CEvent等

  2. 可以保留創建的線程指針,使用:

    BOOL TerminateThread( HANDLEhThread,DWORDdwExitCode);

J. C語言中return的作用是什麼,能具體點嗎

return 表示把程序流程從被調函數轉向主調函數並把表達式的值帶回主調函數,實現函數值的返回,返回時可附帶一個返回值,由return後面的參數指定。

return通常是必要的,因為函數調用的時候計算結果通常是通過返回值帶出的。 如果函數執行不需要返回計算結果,也需要返回一個狀態碼來表示函數執行的順利與否(-1和0就是最常用的狀態碼),主調函數可以通過返回值判斷被調函數的執行情況。

(10)C語言return清理線程擴展閱讀:

C語言return返回值的說明:

1、沒有返回值的函數為空類型,用void表示。

2、return 語句可以有多個,可以出現在函數體的任意位置,但是每次調用函數只能有一個 return 語句被執行,所以只有一個返回值。

3、函數一旦遇到 return 語句就立即返回,後面的所有語句都不會被執行到了。從這個角度看,return 語句還有強制結束函數執行的作用。

4、return語句是提前結束函數的唯一辦法。

參考資料來源:網路-return(C語言語句)