法克油啊,讓我一個小白情何以堪。c++
good job 果真天下文章一大抄,我爸說的沒錯 No fuck u any morewindows
我他孃的在win下裝明瓜娃64的時候有倆選項,win32和posix線程。win32線程和皮線程的差別我仍是知道的,蛋疼的是這裏的選項是個啥(內心話他孃的不會安裝旁邊給個hint啊) 讓我瑟瑟發抖的是,要是我選posix,鬼知道會不會讓我蛋疼的調用不了WINAPI,好比新增線程api
讀的有點膈應的翻譯: 我正在安裝 mingw-w64 on Windows,有兩個選項: win32線程和posix線程。 我知道win32線程和pthreads之間的區別,可是我不明白這兩個選項之間的區別。 我懷疑若是我選擇了posix線程,它將阻止我調用像CreateThread這樣的WinAPI函數。 彷佛這個選項指定了哪一個程序或者庫將使用哪一個線程 API,但經過什麼? 由 GCC,libstdc++或者其餘事物? 我發現:什麼區別thread_posixs和 thread_win32 gcc Windows 港?多線程
解答以下:函數
簡而言之,對於這個版本的mingw,threads-posix發行版將使用 posix API並容許使用 std:: thread,threads-win32將使用 win32api,並禁用標準的std::thread 部分。 好的,若是我選擇win32線程,那麼 std::thread 將不可用,可是win32線程仍將被使用。 可是用什麼?post
- gcc運行時( 特殊的異常處理)的部分依賴於正在使用的線程模型。 所以,若是你使用的是使用posix線程構建的運行時版本,但決定在你本身的代碼中使用 win32 api建立線程,那麼你可能會遇到一些問題。 即便你正在使用運行時的win32線程版本,你可能也不該該直接調用 win32 api 。 引用來自 MinGW常見問題解答:
- 因爲MinGW使用了 Windows 附帶的標準Microsoft運行時庫,因此你應該當心並使用正確的函數來生成一個新的線程。 CreateThread 函數將不會正確地爲運行時庫設置堆棧。 你應該使用 _beginthreadex,它是( 幾乎幾乎) 徹底兼容 CreateThread 。 GCC附帶了一個編譯器運行時庫( 宋體),它使用( 其中之一) 提供了一個用於在它的支持的語言中實現多線程相關功能的。 最相關的例子是 C++11 libstdc++ <thread>,<mutex>,<future>, gcc時沒有一個完整的實現了其內部win32線程模型。 MinGW-w64提供了 winpthreads ( Win32多線程API之上的一個pthreads實現),GCC能夠連接它來啓用全部的奇妙特性。
- 我必須強調這裏選項不容許你編寫任何你想要的代碼( 對於你能夠在代碼中調用的API,它有絕對的無影響) 。 它只反映了 (libgcc/libstdc++/...) 庫的使用了哪些運行時。 由 @James 引用的警告與gcc線程模型的內部無關,而是與microsoft實現的CRT有關。
posix: 啓用 c++11/c11多線程功能。 使depend依賴於 libwinpthreads,這樣即便你不直接調用 API,你將分發 winpthreads 。 使用應用程序分發一個DLL沒有什麼問題。 win32: 沒有C++11多線程功能。 對任何調用 Win32 api或者 pthreads api的用戶代碼都不影響。 你能夠同時使用兩個。性能
原做者:rubenvbgoogle
https://ask.helplib.com/windows/post_675746spa
posix和win32對咱們平常開發沒啥影響,我看誰爽選哪一個就行了。
--
另外調試選項sjlj和seh的你也能夠用這個套路本身去扒一扒,大概就是調試性能和report方式啥的
若是你能用在線的installer就直接用,但我試了一下綠條條根本就不跑,選擇一下本身下包安裝啦。
原文出處:https://www.cnblogs.com/rockbean/p/12318002.html