如果您想了解Windows的gcc端口中thread_posixs和thread_win32有什么区别?和thread(s)percore的知识,那么本篇文章将是您的不二之选。我们将深入剖析Windo
如果您想了解Windows的gcc端口中thread_posixs和thread_win32有什么区别?和thread(s) per core的知识,那么本篇文章将是您的不二之选。我们将深入剖析Windows的gcc端口中thread_posixs和thread_win32有什么区别?的各个方面,并为您解答thread(s) per core的疑在这篇文章中,我们将为您介绍Windows的gcc端口中thread_posixs和thread_win32有什么区别?的相关知识,同时也会详细的解释thread(s) per core的运用方法,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- Windows的gcc端口中thread_posixs和thread_win32有什么区别?(thread(s) per core)
- .net – AppDomain.GetCurrentThreadID对于Windows API调用的Thread.ManagedThreadID?
- .net – Windows.System.Threading.ThreadPool和System.Threading.ThreadPool有什么区别?
- android – _id和thread_id有什么区别?
- c – boost :: thread_sleep vs boost :: chrono :: thread_clock不一致
Windows的gcc端口中thread_posixs和thread_win32有什么区别?(thread(s) per core)
我想下载适用gcc 4.7.2
于 Windows 的最新可用版本的编译器。当我到达本应该看到下载链接的页面时,我遇到了两个类别:
- 线程-posix
- 线程-win32
这两者有什么区别?它们只是线程实现吗?我的意思是它们只是在实现方式上有所不同,因此最终结果(类,如何使用它们等)保持不变?还是他们强加了特定的编码风格?
答案1
小编典典因此,您提供的链接导致构建独立的 gcc 4.7.2 for windows,即 mingw64。为了构建这个编译器,使用了一组脚本,它们有助于定义编译选项。这些脚本简称为 MinGW-builds,可以在不同的地方找到:
- 谷歌代码
- github分叉
脚本有一个选项,用于指定将哪个线程模型用于 C++11 标准的 std::threads 部分(由于该版本的 GCC 上应用了实验性补丁,MinGW 允许这样做)。在一种情况下,使用了 win32 线程 API,而在另一种情况下,使用了 posix API。
请注意,Windows 不支持所有开箱即用的 POSIX API,因此需要使用一些外部仿真库(winpthreads)。
GCC 源配置脚本有一个选项来指定 API (–enable-threads=),这就是构建脚本中使用的。
简而言之,对于这个版本的 mingw,threads-posix 版本将使用 posix API 并允许使用 std::thread,而 threads-win32 将使用 win32 API,并禁用 std::thread 部分标准。
.net – AppDomain.GetCurrentThreadID对于Windows API调用的Thread.ManagedThreadID?
我发现示例代码声明了以下函数:
<DllImport("User32.dll",CharSet:=CharSet.Auto,_ CallingConvention:=CallingConvention.StdCall)> _ Public Overloads Shared Function SetwindowsHookEx _ (ByVal idHook As Integer,ByVal HookProc As CallBack,_ ByVal hInstance As IntPtr,ByVal wParam As Integer) As Integer End Function
调用函数时,使用以下代码:
hHook = SetwindowsHookEx(WH_MOUSE,_ hookproc,_ IntPtr.Zero,_ AppDomain.GetCurrentThreadId())
但是Appdomain.GetCurrentThreadID会生成警告:“公共共享函数GetCurrentThreadId()As Integer”已过时:AppDomain.GetCurrentThreadId已被弃用,因为当托管线程在光纤上运行时(即轻量级线程)不提供稳定的Id.要获得受管线程的稳定标识符,请使用Thread上的ManagedThreadId属性.
我试过使用ManagedThreadID,但这不行.返回的线程ID似乎是线程的逻辑线程ID,因为它在.net运行时运行,而不是Win32线程标识符.
调用函数ith AppDomain.GetCurrentThreadID有效,但我真的希望有一个“稳定的标识符”为我的线程.
有人向我解释,是否可以在这个上下文中使用ManagedThreadID(我假设没有),如果没有,我需要避免的事情,以阻止AppDomain.CurrentThreadID变得“不稳定”?
干杯
ManagedThreadId存在的原因是因为本机和被管线程之间不一定是1-1映射.只要本地线程与其替换的本机线程兼容,CLR可以自由使用多个本机线程来运行单个托管线程.它不能例如在一个不同的COM公寓.
在某些方面你有点困在这里. AFAIK,没有办法100%保证你将有一个给定的线程相同的本机线程.如果您运行WinForms或WPF应用程序,并且在UI线程上发生对本地代码的调用,则可以实现非常高级别的保证.原因是这两个UI框架都存在于STA公寓中,这使得它非常困难(如果可能的话)CLR从您下面切换出来.
简短版本:如果您使用的是WinForms或WPF应用程序,并且在UI线程上运行该应用程序,则可以为此标识符提供合理的稳定级别.
.net – Windows.System.Threading.ThreadPool和System.Threading.ThreadPool有什么区别?
解决方法
如果您正在为WP8或Windows应用商店开发XAML应用程序,请使用Windows.System版本.
android – _id和thread_id有什么区别?
我发现在SMS数据库中有两个字段_id和thread_id,_id和thread_id有什么区别?
如果我想按ID删除短信,我应该使用哪个字段? _id还是thread_id?谢谢!
解决方法:
_id是sms ContentProvider的主要自动增量键,thread_id是特定会话的id
c – boost :: thread_sleep vs boost :: chrono :: thread_clock不一致
#include <iostream> #include <boost/thread.hpp> #include <boost/chrono/thread_clock.hpp> void foo() { boost::this_thread::sleep(boost::posix_time::microseconds(500)); } int main() { boost::chrono::thread_clock::time_point start = boost::chrono::thread_clock::Now(); foo(); boost::chrono::thread_clock::time_point stop = boost::chrono::thread_clock::Now(); std::cout << "duration = " << boost::chrono::duration_cast<boost::chrono::microseconds>(stop-start).count() << " microsec\n"; }
我得到以下输出:
duration = 121 microsec duration = 121 microsec duration = 110 microsec duration = 114 microsec
此外,当我用不同的值(例如200)替换500时,输出始终大约为100.使用-O3进行编译.为什么时机不一致?
PS:我读到睡眠已被弃用,但是当我用它替换它时
boost::this_thread::sleep_for(boost::chrono::microseconds(200));
输出在~20微秒的范围内.
解决方法
thread_clock class provides access to the real thread wall-clock,i.e.
the real cpu-time clock of the calling thread.
我认为wall-time是实时传递的,而不是cpu-time,它不包括线程休眠的时间.无论如何,为了获得一致的数字,我不得不使用boost :: chrono :: system_clock.
关于Windows的gcc端口中thread_posixs和thread_win32有什么区别?和thread(s) per core的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于.net – AppDomain.GetCurrentThreadID对于Windows API调用的Thread.ManagedThreadID?、.net – Windows.System.Threading.ThreadPool和System.Threading.ThreadPool有什么区别?、android – _id和thread_id有什么区别?、c – boost :: thread_sleep vs boost :: chrono :: thread_clock不一致等相关知识的信息别忘了在本站进行查找喔。
本文标签: