導航:首頁 > 程序命令 > c語言執行命令行是非同步還是同步

c語言執行命令行是非同步還是同步

發布時間:2022-09-28 09:00:50

『壹』 C語言中的命令行是什麼,他有什麼作用.~~

就是運行程序的時候要帶進去的數據,一般留空即可,這個要講也是很復雜的..簡單來說,比如cs1.5
一般運行"d:\program
files\cs1.5\cstrike.exe"即可,但是我想進入控制台,那麼命令行參數為-console
就是說運行"d:\program
files\cs1.5\cstrike.exe"
-console就可以了
用過命令提示符沒有?比如x命令
x
c:\a.txt
d:\b.txt
其中"c:\a.txt
d:\b.txt"就是命令行參數

『貳』 用C語言寫的程序該怎樣執行

程序先是把.H頭文件寫在最上面,

編譯時是從main
開始的.

然後調入程序中用到的在H文件中的函數.

『叄』 filechannel transfrerfrom是同步還是非同步

JDK7.0和JDK6.0有什麼區別? jdk7是模塊化程序,模塊間的依賴性變小了.jdk的好多功能間有相互依賴性,導致一個配置不對,好多不能用.舉例來說:假設你正使用Logging API(java.util.logging)),Logging需要NIO和JMX,JMX需要JavaBeans, JNDI, RMI和CORBA,JNDI需要java.applet.Applet而且JavaBeans依賴AWT. JDK7 新特性: JSR203:JDK中會更多的IO API(「NIO.2」)訪問文件系統與之前的JDK中通過java.io.File訪問文件的方式不同,JDK7將通過java.nio.file包中的類完成。JDK7會使用java.nio.file.Path類來操作任何文件系統中的文件。(這里說的任何文件系統指的是可以使用任何文件存儲方式的文件系統) 示例: Java7之前 File file = new File(「some_file」); 使用Java7 Path path = Paths.get(「some_file」); 在File類中加入了新的方法toPath(),可以方便的轉換File到Path Path path = new File(「some_file」).toPath(); Socket通道綁定和配置在JDK7中面向通道的網路編程也得以更新!JDK7中可以直接綁定通道的socket和直接操作socket屬性。JDK7提供了平台socket屬性和指定實現的socket屬性。 JDK7加入了一個新的位元組通道類,SeekableByteChannel NetworkChannel是面向網路通道編程模塊中的又一個新的超介面。利用它可以方便的綁定通道socket,並且方便設置和獲取socket的屬性。 MulticastChannel介面方便創建IP協議多播。多播實現直接綁定到本地的多播設備。 靈活的非同步I/O可以通過真正的非同步I/O,在不同的線程中運行數以萬計的流操作!JKD7提供了對文件和socket的非同步操作。一些JDK7中的新通道: AsynchronousFileChannel:非同步文件通道可以完成對文件的非同步讀寫操作。 AsynchronouseSocketChannel:Socket中的一個簡單非同步通道,方法是非同步的並且支持超時。 :非同步的ServerSocket AsynchronousDatagramChannel:基於數據包的非同步socket JSR292:Java平台中的動態編程語言Da Vinci Machine項目(JSR292)的主旨是擴展JVM支持除Java以外的其它編程語言,尤其是對動態編程語言的支持。所支持的語言必須和Java一樣不收到歧視並共同存在。JSR334:Java語言的一些改進OpenJDK項目的創造(JSR334)的主旨是對Java語言進行一些小的改進來提高每天的Java開發人員的工作。這些改進包括: Switch語句允許使用String類型 支持二進制常量和數字常量中可以使用下劃線 使用一個catch語言來處理多種異常類型 對通用類型實例的創建提供類型推理 Try-with-resources語句來自動關閉資源 JSR119:Java編譯器APIJSR199是在JDK6中加入的,主要用來提供調用Java編譯器的API。除了提供javac的命令行工具,JSR199提供Java編譯器到程序交互的能力。Java編譯器API要達到三個目標: 對編譯器和其它工具的調用 對結構化的編譯信息進行訪問 對文件輸入輸出定製化處理的能力 JSR206:Java XML處理的API (JAXP)JSR206即Java API for XML Processing(JAXP),是Java處理XML文檔的一個與實現無關,靈活的API。 JAXP1.3的主要特性包括: DOM3 內建通過XML Schema進行文檔校驗的處理器 對XML Schema中的數據類型的實現,在javax.xml.datatype包中。 XSLTC,最快的轉換器,也是XSLT處理中的默認引擎。 提供對XInclude的實現。這將會方便我們使用文本和其它已有的XML來創建新的文檔,這樣可以對文檔片段進行重用。 JDK7中會包含JAXP1.3,這個是JAXP的最新實現。 綁定技術(JAXB)JSR222即Java Architecture for XML Binding(JAXB)。JAXB的目的是便於Java程序進行Java類到XML文檔的映射。 JAXB2的主要特性: 支持全部的W3C XML Schema特性。(JAXB1.0說明了對於W3C XML Schema中某些特性的不支持) 支持綁定Java到XML文檔,通過添加javax.xml.bind.annotation包來控制綁定。 大量減少了對於schema衍生出來的類。 通過JAXP1.3的校驗API來提供額外的校驗能力。 JDK7中將包括JAXB2.2 JSR224:基於XML的Web服務API(JAX-WS)JSR224即Java API for XML-based Web Services(JAX-WS),是一個基於Annotation標注的編程模型,主要針對Web Service應用和客戶端開發。 JAX-WS2的主要特性包括: 對JAXB2.1 API的支持(JSR222) 對Web Services Addressing 1.0的支持 EndpointReference(EPR)的API:創建(BindingProvider.getEndpointReference(),Endpoint.getEndpointReference(),MessageContext.getEndpointReference()) 事務處理(使用JAXB2.1綁定W3C EPR到W3CEndpointReference類,使用JAXB Marshall/Unmarshall W3CendpointReference類) 提供友好的API來啟用和停止某些特性,例如MTOM特性和Addressing特性 JDK7將包含JAX-WS2.2 可插拔的Annotation處理APIJSR269即Pluggable Annotation-Processing API 從JDK5開始,Annotation標注就成了強大的機制用來標注我們的類、屬性和方法。通常Annotation標注是在創建階段或者運行階段進行處理的,並獲取語義結果。JSR269主要用來定義一套API,允許通過可插拔的API來進行標注處理器的創建。 規范包括一部分的API用來對Java編程語言進行構建,還有就對標注處理器聲明和控制運行的部分。 有了程序中的Annotation標注,就需要有標注處理器框架來反射程序的結構。 Annotation處理器會指定他們處理的標注並且更多的處理器可以合作運行。 標注處理器和程序結構的API可以在構建階段訪問。 小的改進java.util.Objects提供了一套9個靜態方法。其中兩個方法用來檢測當前對象是null還是非null。兩個方法用來提供生成toString()字元串同時支持null對象。兩個用來處理hash的方法。兩個方法用來處理equals。最後一個compare方法用來進行比較。Swing JLayer組件JXLayer是一個組件裝飾器,提供了用來裝飾多個組合組件的方式,並且可以捕獲所有滑鼠、鍵盤和FocusEvent的事件,並針對所有的XLayer子組件。這個組件只會對public swing的api起作用,對全局設置沒有作用,例如對EventQueue或者RepaintManager。(除了這些,Swing還將在JDK7中提供JXDatePicker和CSS方式樣式)並發和集合APIJSR166,並發和集合API提供了靈活的非同步處理,並發HashMap,傳輸隊列和輕量級的fork/join框架以及本地線程方式的偽隨機數生成器。類載入器體系結構類載入器已經升級到了可以在無等級類載入器拓撲中避免死鎖。JDK7中包含了一個對於多線程自定義類載入器的增強實現,名字為具有並行能力的類載入器。使用平行能力的類載入器載入class,會同步到類載入器和類名。Locale類的改進Java Locale避免由於小的變化導致數據丟失。除此,Locale應該提供更多的特性,例如IETF BCP 47和UTR 35(CLDR/LDML)。分離用戶Locale和用戶介面LocaleJDK7分離了UI語言的locale和格式化locale,這個已經在Vista之後的windows系統中實現了。嚴格的類文件檢測通過JavaSE6的規范,version51(SE7)的類文件和之後的版本必須通過類型檢測來檢驗。對於老的推理驗證VM不可以宕掉Elliptic-Curve Cryptography (ECC)橢圓曲線加密 從JDK7開始,Java提供對標準的ECC演算法的靈活實現(基於橢圓曲線的公鑰加密演算法)Swing中的Nimbus外觀Nimbus是JDS(Java Desktop System)中的新外觀。這個也是Solaris11的GTK主題Java2D中的XRender PipelineJDK7中加入了基於X11 XRender擴展的Java2D圖形管道。這將提供更多的對於當前先進的GPUs訪問的功能。TLS1.2TLS (Transport Layer Security)是一個用在Internet上的數據傳輸安全協議,用來避免監聽、引誘和消息偽造。TLS的主要目的是提供兩個應用間通信的隱私和數據完整。TLS是RFC5246標准,在JDK7中提供1.2JDBC4.0/4.1JDBC4.1特性只在JDK7或者更高版本中存在。JDBC4.1隻是對JDBC4.0進行較小的改動。關於一些JDBC4.0/4.1的特性: 數據源—Derby包括了對於javax.sql.DataSource的新的實現 JDBC驅動自動載入—應用不必在通過Class.forName()方法來載入資料庫驅動了。取而代之的是DriverManager會根據應用請求連接的情況,自動查找到合適的JDBC驅動。 包裝—這是JDBC4.0中的新的概念,主要是通過這種機制可以讓應用獲取的廠商提供的標准JDBC對象實現,例如Connections,Statements和ResultSets。 Statement事件—連接池可以監聽Statement的關閉和錯誤時間。addStatementEventListener和removeStatementEventListener被加入到了javax.sql.PooledConnection JDK7提供了JDBC4.1全部的支持 透明窗體和異形窗體為了6u10版本的圖形處理,JDK提供了透明效果的支持(簡單透明和像素透明)並且提供了對於異形窗體的支持(可以將窗體設置成任意形狀),輕重混合並且增強了AWT安全警告。透明效果和異形窗體是通過com.sun.awt.AWTUtilities類實現的。Unicode6.0Unicode6.0提供了諸如2.088字元集、對已經存在字元集的屬性改進、格式化改進以及新的屬性和數據文件。 JDK7已經更新到對Unicode6.0的支持。 要來關閉URLClassLoader的方法 對JMX代理和MBeans的改進 通過URLClassLoader,應用可以通過URL搜索路徑來載入類和資源。JKD7提供了close()新方法來幫助URLClassLoader清理資源。 這個改進來至於JRockit,可以方便連接平台。MBean伺服器可以通過防火牆提供一套MBeans,這些暴露了VM中的一些內部操作的信息 新的垃圾回收器JDK7提供了新的垃圾回收器,針對目前的CMS垃圾回收器,這將會讓垃圾回收器有更少的停頓時間和更高的語言效果。改進的JSRJSR901:Java Language Specification(JLS)Java語言計劃 JSR901包括了從第一版Java規范到現在為止的所有的變化、說明和補充。Java語言通過JLS規范。 對於JLS的改變通過JSR901進行管理 JDK7將會包括最新的JSR901 JSR924:JVM平台規范 JSR924目的是維護Java虛擬機規范的變化,其中第二版是為了J2SE1.5的。 Java SE API JavaSE APIs保持著對例行維護和小范圍改進的加入計劃的記錄 延期到JDK8或者之後的規范 JSR294:Java語言和虛擬機對模塊編程技術的支持—當前JSR主要的目的是提供在編譯期和運行期的模塊編程支持 JSR308:對於Java類型的Annotation注釋—這將是對於當前注釋符號系統的擴展,將允許我們在類型中出現注釋符號。 JSR296:Swing應用框架—主旨是消除Swing編程中的模板代碼並且提供Swing程序更加簡單的結構。 模塊化—提供一個明確的、簡單的、低級別的模塊系統,主要目的是將JDK模塊化。 JSR TBD:Lambda項目—Lambda表達式(通俗的也稱為「閉包「)和對Java編程語言的保護方法 JSR TBD:對於集合支持的語言—常量表達式對於lists、sets和maps的迭代以及通過索引符號對lists和maps的訪問。 Swing JDatePicker組件—添加SwingLabs JXDatePicker組件到平台。

『肆』 C語言同步和非同步的區別

同步:代碼立即執行
非同步:代碼程序先在隊列排隊,等到可以執行再去執行。

『伍』 同步與非同步,阻塞與非阻塞的區別,以及select,poll和epoll

非同步的概念和同步相對。
(1)當一個同步調用發出後,調用者要一直等待返回消息(結果)通知後,才能進行後續的執行;

(2)當一個非同步過程調用發出後,調用者不能立刻得到返回消息(結果)。實際處理這個調用的部件在完成後,通過 狀態、通知和回調 來通知調用者。

這里提到執行部件和調用者通過三種途徑返回結果:狀態、通知和回調。使用哪一種通知機制,依賴於執行部件的實現,除非執行部件提供多種選擇,否則不受調用者控制。

(A)阻塞調用是指調用結果返回之前,當前線程會被掛起,一直處於等待消息通知,不能夠執行其他業務

(B)非阻塞調用是指在不能立刻得到結果之前,該函數不會阻塞當前線程,而會立刻返回

場景比喻:
舉個例子,比如我去銀行辦理業務,可能會有兩種方式:

在上面的場景中,如果:
a)如果選擇排隊(同步),且排隊的時候什麼都不幹(線程被掛起,什麼都幹不了),是同步阻塞模型;
b)如果選擇排隊(同步),但是排隊的同時做與辦銀行業務無關的事情,比如抽煙,(線程沒有被掛起,還可以干一些其他的事),是同步非阻塞模型;
c)如果選擇拿個小票,做在位置上等著叫號(通知),但是坐在位置上什麼都不幹(線程被掛起,什麼都幹不了),這是非同步阻塞模型;
d)如果選擇那個小票,坐在位置上等著叫號(通知),但是坐著的同時還打電話談生意(線程沒有被掛起,還可以干其他事情),這是非同步非阻塞模型。

對這四種模型做一個總結:
1:同步阻塞模型,效率最低,即你專心排隊,什麼都不幹。
2:非同步阻塞,效率也非常低,即你拿著號等著被叫(通知),但是坐那什麼都不幹
3:同步非阻塞,效率其實也不高,因為涉及到線程的來回切換。即你在排隊的同時打電話或者抽煙,但是你必須時不時得在隊伍中挪動。程序需要在排隊和打電話這兩種動作之間來回切換,系統開銷可想而知。
4:非同步非阻塞,效率很高,你拿著小票在那坐著等叫號(通知)的同時,打電話談你的生意。

linux下幾個基本概念
1:用戶控制項和內核空間。 現代操作系統都是採用虛擬存儲器,在32位操作系統下,它的定址空間(虛擬存儲空間)為4G(2的32次方)。為了保證用戶進程補鞥呢直接操作內核,保證內核的安全,操作系統將虛擬空間劃分為兩部分,一部分為內核空間,一部分為用戶空間。對linux操作系統而言,將最高的1G位元組空間分給了內核使用,稱為內核空間,將較低的3G位元組的空間劃分為用戶空間。

2:進程切換很耗資源 ,為了控制進程的執行,內核必須有能力掛起正在cpu上運行的進程,並恢復以前掛起的某個進程的執行,這種行為叫進程的切換。每次切換,要保存上一個的上下文環境等等,總之記住進程切換很耗資源。

3:文件描述符 :文件描述符在形式上是一個非負整數。實際上,他是一個索引,指向內核為每個進程所維護的該進程打開文件的記錄表。當程序打開一個文件時,內核就會向進程返回一個非負整數的文件描述符。但是文件描述符一般在unix,linux系統中才講。

緩存IO ,大多數系統的默認IO操作都是緩存IO,在linux的緩存IO機制中,操作系統會將IO的數據緩存在系統的頁緩存(page cache)中,也就是說,數據會先被拷貝到操作系統內核的緩沖區,然後才會從操作系統內核的緩沖區拷貝到應用程序的地址空間。 緩存IO的缺點: 數據在傳輸過程中需要在應用程序和地址空間和內核進行多次數據拷貝操作,這種數據拷貝操作鎖帶來的cpu以及內存消耗是很大的。

LINUX的IO模型
網路IO的本質是socket的讀取。socket在linux系統被抽象為流,故對網路IO的操作可以理解為對流的操作。

對於一次IO訪問,比如以read操作為例, 數據會先被拷貝到操作系統內核的緩沖區,然後才會從內核緩沖區拷貝到進程的用戶層,即應用程序的地址空間 。故當一個read操作發生時,其實是經歷了兩個階段:
1:內核緩沖區的數據就位
2:數據從內核緩沖區拷貝到用戶程序地址空間

那麼具體到socket io的一次read操來說,這兩步分別是:
1:等待網路上的數據分組到達,然後復制到內核緩沖區中
2:數據從內核緩沖區拷貝到用戶程序的地址空間(緩沖區)

所以說 網路應用要處理的無非就兩個問題:網路IO和數據計算 ,一般來說網路io帶來的延遲影響比較大。

網路IO的模型大致有如下幾種:

熟悉不? 我們常說的select,poll和epoll就是屬於同步模型中多路復用IO的不同實現方法罷了。 下面分別對同步阻塞,同步不阻塞,同步io復用進行說明。

一:同步阻塞
它是最簡單也最常用的網路IO模型。linux下默認的socket都是blocking的。

從圖中可以看到,用戶進程調用recvfrom這個系統調用後,就處於阻塞狀態。然後kernel就開始了IO的第一個階段:數據准備。等第一個階段准備完成之後,kernel開始第二階段,將數據從內核緩沖區拷貝到用戶程序緩沖區(需要花費一定時間)。然後kernel返回結果(確切的說是recvfrom這個系統調用函數返回結果),用戶進程才結束blocking,重新運行起來。
總結 同步阻塞模型下,用戶程序在kernel執行io的兩個階段都被blocking住了 。但是優點也是因為這個,無延遲能及時返回數據,且程序模型簡單。

二:同步非阻塞
同步非阻塞就是隔一會瞄一下的輪詢方式。同步非阻塞模式其實是可以看做一小段一小段的同步阻塞模式。

三:IO多路復用
由於同步非阻塞方式需要不斷的輪詢,光輪詢就占據了很大一部分過程,且消耗cpu資源。而這個用戶進程可能不止對這個socket的read,可能還有對其他socket的read或者write操作,那人們就想到了一次輪詢的時候,不光只查詢詢一個socket fd,而是在一次輪詢下,查詢多個任務的socket fd的完成狀態,只要有任何一個任務完成,就去處理它。而且,輪詢人不是進程的用戶態,而是有人幫忙就好了。那麼這就是所謂的 IO多路復用 。總所周知的linux下的select,poll和epoll就是這么乾的。。。

selelct調用是內核級別的,selelct輪詢相比較同步非阻塞模式下的輪詢的區別為: 前者可以等待多個socket,能實現同時對多個IO埠的監聽 ,當其中任何一個socket數據准備好了,就返回可讀。 select或poll調用之後,會阻塞進程 ,與blocking IO 阻塞不用在於,此時的select不是等到所有socket數據達到再處理,而是某個socket數據就會返回給用戶進程來處理。
其實select這種相比較同步non-blocking的效果在單個任務的情況下可能還更差一些 ,因為這里調用了select和recvfrom兩個system call,而non-blocking只調用了一個recvfrom,但是 用select的優勢在於它可以同時處理多個socket fd

在io復用模型下,對於每一個socket,一般都設置成non-blocking,但是其實 整個用戶進程是一直被block的 ,只不過用戶process不是被socket IO給block住,而是被select這個函數block住的。

與多進程多線程技術相比,IO多路復用的最大優勢是系統開銷小。

一:select
select函數監視多個socket fs,直到有描述符就緒或者超時,函數返回。當select函數返回後,可以通過遍歷fdset,來找到就緒的描述符。select的基本流程為:

二:poll
poll本質上跟select沒有區別,它將用戶傳入的數組拷貝到內核空間,然後查詢每個fd的狀態,如果某個fd的狀態為就緒,則將此fd加入到等待隊列中並繼續遍歷。如果遍歷完所有的fd後發現沒有就緒的,則掛起當前進程,直到設備就緒或者主動超時。被喚醒後它又要再次遍歷fd。
特點:
1:poll沒有最大連接數限制,因為它是用基於鏈表來存儲的,跟selelct直接監聽fd不一樣。
2:同樣的大量的fd的數組被整體復制與用戶態和內核地址空間之間。
3:poll還有一個特點是水平觸發:如果報告了fd後沒有被處理,則下次poll時還會再次報告該fd。
4:跟select一樣,在poll返回後,還是需要通過遍歷fdset來獲取已經就緒的socket。當fd很多時,效率會線性下降。

三:epoll

epoll支持水平觸發和邊緣觸發,最大的特點在於邊緣觸發,它只告訴進程哪些fd剛剛變為就緒態,並且只會通知一次。還有一個特點是,epoll使用「事件」的就緒通知方式,通過epoll_ctl注冊fd,一旦該fd就緒,內核就會採用類似callback的回調機制來激活該fd,epoll_wait便可以收到通知。

沒有最大並發連接的限制,能打開的FD的上限遠大於1024(1G的內存上能監聽約10萬個埠)。

效率提升,不是輪詢的方式,不會隨著FD數目的增加效率下降。只有活躍可用的FD才會調用callback函數;即Epoll最大的優點就在於它只管你「活躍」的連接,而跟連接總數無關,因此在實際的網路環境中,Epoll的效率就會遠遠高於select和poll。

內存拷貝,利用mmap()文件映射內存加速與內核空間的消息傳遞;即epoll使用mmap減少復制開銷。

聊聊同步、非同步、阻塞與非阻塞
聊聊Linux 五種IO模型
聊聊IO多路復用之select、poll、epoll詳解

『陸』 c語言的特點

1、簡潔緊湊、靈活方便。

C語言一共只有32個關鍵字,9種控制語句,程序書寫自由,主要用小寫字母表示。它把高級語言的基本結構和語句與低級語言的實用性結合起來。C語言可以象匯編語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作單元。

2、運算符豐富。

C的運算符包含的范圍很廣泛,共有種34個運算符。C語言把括弧、賦值、強制類型轉換等都作為運算符處理。從而使C的運算類型極其豐富表達式類型多樣化,靈活使用各種運算符可以實現在其它高級語言中難以實現的運算。

3、數據結構豐富。

C的數據類型有:整型、實型、字元型、數組類型、指針類型、結構體類型、共用體類型等。能用來實現各種復雜的數據類型的運算。並引入了指針概念,使程序效率更高。另外C語言具有強大的圖形功能,支持多種顯示器和驅動器。且計算功能、邏輯判斷功能強大。

4、C是結構式語言。

結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰,便於使用、維護以及調試。C語言是以函數形式提供給用戶的,這些函數可方便的調用,並具有多種循環、條件語句控製程序流向,從而使程序完全結構化。

5、C語法限制不太嚴格、程序設計自由度大。

一般的高級語言語法檢查比較嚴,能夠檢查出幾乎所有的語法錯誤。而C語言允許程序編寫者有較大的自由度。

6、C語言允許直接訪問物理地址,可以直接對硬體進行操作。

因此既具有高級語言的功能,又具有低級語言的許多功能,能夠象匯編語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作單元,可以用來寫系統軟體。

7、C語言程序生成代碼質量高,程序執行效率高。

一般只比匯編程序生成的目標代碼效率低10へ20%。

c語言的內容和應用

C語言包括:數據類型、運算符與表達式、程序結構、順序、選擇、循環、數組、函數、預處理命令、指針、結構體與共用體、文件、位運算。

在編程領域中,C語言的運用非常之多,它兼顧了高級語言和匯編語言的優點,相較於其它編程語言具有較大優勢。計算機系統設計以及應用程序編寫是C語言應用的兩大領域。同時,C語言的普適較強,在許多計算機操作系統中都能夠得到適用,且效率顯著。


『柒』 【C語言Playsound】非同步播放與同步播放

應無問題:
#include <stdio.h>
#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")
void main()
{
PlaySound (TEXT("zzd.wav"), NULL, SND_ASYNC | SND_NODEFAULT);
while (1)
{
printf("program is running... here\n");
Sleep(1000);
}
exit(0);
}

如果你的編譯器支持中文,你把.wav 或 .wma 之類的 音頻 文件名和 路徑 換成 你的 E:\\路徑\\文件名 便可。

『捌』 C#多線程同步和非同步共同使用Demo

做了個小demo
usingSystem;
usingSystem.Threading;
usingSystem.Windows.Forms;

{
publicpartialclassForm1:Form
{
publicForm1()
{
InitializeComponent();
}
privateRandomrdTime=newRandom();
(TextBoxcontrol,stringtext);
;
privateintm_threadOverCount=0;
privatevoidForm1_Load(objectsender,EventArgse)
{
Threadth=newThread(ThreadA);
th.Start();
//winform其它操作..
}
privatevoidThreadA()
{
//A線程要做的事
//這里模擬做事耗時1s-10s之間
Thread.Sleep(rdTime.Next(1000,10000));
ChangeTextBox(textBox1,"線程A處理完畢");
//按照題主要求,A線程處理完畢處理B、C
ThreadtB=newThread(ThreadB);
ThreadtC=newThread(ThreadC);
m_threadOverCount=0;
LastRunThreadD+=ThreadD;
tB.Start();
tC.Start();
}
privatevoidThreadB()
{
Thread.Sleep(rdTime.Next(1000,10000));
m_threadOverCount++;
ChangeTextBox(textBox1,"線程B處理完畢");
//處理完畢運行線程D
if(LastRunThreadD!=null)
LastRunThreadD.Invoke(null,null);
}
privatevoidThreadC()
{
Thread.Sleep(rdTime.Next(1000,10000));
m_threadOverCount++;
ChangeTextBox(textBox1,"線程C處理完畢");
//處理完畢運行線程D
if(LastRunThreadD!=null)
LastRunThreadD.Invoke(null,null);
}
privatevoidThreadD(objectsender,EventArgse)
{
//確定B、C線程都結束了才正式執行
if(m_threadOverCount==2)
{
Thread.Sleep(rdTime.Next(1000,10000));
ChangeTextBox(textBox1,"線程D處理完畢");
}
}
//這里使用Control而不是使用Textbox,是為了做通用委託,更改不同控制項不同屬性
//privatevoidChangeTextBox(Controlcontrol,paramsobject[]value);
privatevoidChangeTextBox(TextBoxcontrol,stringtext)
{
if(control.InvokeRequired)
{
ChangeTextBoxCallBackctbc=newChangeTextBoxCallBack(ChangeTextBox);
control.Invoke(ctbc,control,text);
}
else
control.Text+=string.IsNullOrEmpty(control.Text)?text:" "+text;
}
}
}

『玖』 頁面同步調用和非同步調用的區別

假設你頁面要做三件事,A,B,C,同步調用的方式一般就是做完A後做B,做完B後再做C,而非同步調用則是,開始做A時,不等A做完,你就可以開始做B,不等B做完,就開始做C。假如三件事都要耗時5s中,這時同步的話最少需要做15s才能完成,而非同步的話,最少可能5s就完成了,所以非同步效率是比較高的。但這只適用於三件事互相沒有關聯的情況。如果有關聯,相互依賴的情況,比如,B必須在A做完才能做,C必須在B做完才能做,同步的話跟以前一樣編程,順序執行就行了,非同步的話,就只能在回調函數裡面執行了,寫起來麻煩點,效率是一樣的。

閱讀全文

與c語言執行命令行是非同步還是同步相關的資料

熱點內容
php的優點和缺點 瀏覽:894
tarlinux命令 瀏覽:149
弧路徑演算法 瀏覽:954
google程序員 瀏覽:345
得稅app扣繳義務人在哪裡 瀏覽:145
老程序員代理模式 瀏覽:323
程序員那麼可愛之追妻 瀏覽:47
氨合成冰機壓縮機 瀏覽:366
有必要加密系統盤嗎 瀏覽:380
php常用架構 瀏覽:524
投資配置演算法 瀏覽:625
idc伺服器怎麼配 瀏覽:946
加密的交友軟體 瀏覽:477
唱歌app哪個最好 瀏覽:681
node命令行參數 瀏覽:301
java清空txt 瀏覽:59
怎麼將永久安卓手機變成蘋果手機 瀏覽:463
App開發如何實現多語言 瀏覽:50
尋路演算法php 瀏覽:249
空氣壓縮機油可以當潤滑油嗎 瀏覽:842