GVKun编程网logo

Windows的gcc端口中thread_posixs和thread_win32有什么区别?(thread(s) per core)

21

如果您想了解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)

Windows的gcc端口中thread_posixs和thread_win32有什么区别?(thread(s) per core)

我想下载适用gcc 4.7.2于 Windows 的最新可用版本的编译器。当我到达本应该看到下载链接的页面时,我遇到了两个类别:

  1. 线程-posix
  2. 线程-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?

.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.这是一个完全管理的概念,并没有真正的代表在本土的世界.因此,您传递给API的API没有任何意义.

ManagedThreadId存在的原因是因为本机和被管线程之间不一定是1-1映射.只要本地线程与其替换的本机线程兼容,CLR可以自由使用多个本机线程来运行单个托管线程.它不能例如在一个不同的COM公寓.

在某些方面你有点困在这里. AFAIK,没有办法100%保证你将有一个给定的线程相同的本机线程.如果您运行WinForms或WPF应用程序,并且在UI线程上发生对本地代码的调用,则可以实现非常高级别的保证.原因是这两个UI框架都存在于STA公寓中,这使得它非常困难(如果可能的话)CLR从您下面切换出来.

简短版本:如果您使用的是WinForms或WPF应用程序,并且在UI线程上运行该应用程序,则可以为此标识符提供合理的稳定级别.

.net – Windows.System.Threading.ThreadPool和System.Threading.ThreadPool有什么区别?

.net – Windows.System.Threading.ThreadPool和System.Threading.ThreadPool有什么区别?

Windows Phone 8 SDK文档未描述Windows.System.Threading.ThreadPool和System.Threading.ThreadPool之间的区别.除了明显的API差异之外,两者之间有什么区别吗?例如,他们使用相同的线程池吗?如果存在潜在的差异,我应该使用哪些时间?

解决方法

Windows.System.Threading.ThreadPool在基于XAML的应用程序中使用是“安全的”,System.Threading.ThreadPool是所有.net应用程序类型可用的标准API.

如果您正在为WP8或Windows应用商店开发XAML应用程序,请使用Windows.System版本.

android – _id和thread_id有什么区别?

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不一致

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微秒的范围内.

解决方法

的确,我忽略了一些明显的事情 documentation说:

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不一致等相关知识的信息别忘了在本站进行查找喔。

本文标签: