libuv是一個很強大的異步處理框架(嚴格意義上不能叫框架,其實就是一組異步函數庫,固然框架這東西有各類各樣的定義和理解_^...),最初的的目的是用於NODEJS的異步處理,不過由於它是一個獨立的項目,能夠獨立於NODEJS存在,同時又能夠跨平臺(類UNIX平臺基於LIBEV,WINDOWS平臺基於IOCP),因此也有不少人直接把他當作異步處理庫來使用,其中.net core 的Kestrel Sever就是基於它構建的 。 web
由於WO對LIBUV理解的也不是很深刻,因此就不詳細的講了,只把源碼附上來,本身看源碼,其中異步的部分是從網上找的TINYWEB的例子,只是和WINDOWS窗體應用程序進行了一次整合而已 。 特此說明 。瀏覽器
仍是遵循老習慣,先運行起來看看操做,至少先知道程序是個什麼樣子,是作什麼用的 。 服務器
第一步先下載源碼
下載地址 : http://files.cnblogs.com/files/jivi/WinFormLibuvTest.zip框架
下載下來後是一個壓縮包,解壓縮,目錄結構異步
WinFormLibuv.sln : VS2013的解決方案文件 函數
lib : libuv的頭文件和Debug以及Release模式下的庫文件放在這個目錄裏 (2016年11月3號)oop
WinFomrLibuv 主程序目錄 spa
打開 WinFormLibuv.sln 並運行程序,出現以下界面 .net
點擊啓動服務orm
而後打開瀏覽器,輸入地址 http://localhost:8080
瀏覽器返加
再看程序
程序很簡單,就是一個簡單的WEB服務器,監聽端口8080 . 一旦有WEB請求了,就回復Welcome to tinyweb字樣 。
由於WINDOWS應用程序有本身的消息(事件)循環 ,
LIBUV也有本身的事件循環,因此主要的點就是怎麼融合這兩個循環,其實方法很簡單(不過官方不推薦這種方式)
while (true) { // 關鍵點在這裏 在WINDOWS的消息循環裏,使用UV_RUN_NOWAIT的方式執行LIBUV的事件循環 uv_run(uv_default_loop(), UV_RUN_NOWAIT); if (GetMessage(&msg, NULL, 0, 0)){ if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } else { break ; } }
固然這種方式對於DialogBox建立的模態窗體沒用,由於DialogBox建立的模態窗體會有本身的消息循環,只有退出模態窗口才會回到主程序的消息循環 。
另外有沒有其它反作用,也不知 。 :)
----------------------------------------------------------------------------------------------------------