草庐IT

【多线程】Thread类

全部标签

c++ - GlobalMemoryStatusEx 线程安全吗?

来自MSDNpage:“GlobalMemoryStatusEx函数返回的信息是易变的。不能保证对该函数的两次连续调用将返回相同的信息。”这是有道理的,但是我无法确定这是否是线程安全的。有人确定知道一种或另一种方式吗?我已尝试使用谷歌搜索,但找不到此信息。 最佳答案 MSDN页面上说的是函数返回的信息是随时间变化的:这就是“volatile”的意思。例如,GetSystemTime返回的信息也是“易变的”。关于过程的其他不同概念是“可重入”和“线程安全”。可重入意味着过程使用的信息依赖于局部变量,而不是全局变量,这可以解释为线程安全

windows - 如何找到线程本地存储的开始和结束?

在Windows和Linux下,如何在给定线程句柄的情况下确定其对应的静态线程本地存储block的开始和结束? 最佳答案 您可以在ThreadInformationBlock中找到此信息.但是请注意,这样做会访问未记录的结构,因此高度不可移植并且可能会在未来版本的Windows中中断。您似乎可以从TIB获取当前线程的线程本地存储区域;我不确定你会得到另一个线程的TLS。您可以尝试深入研究TIB中偏移量0x30处的进程环境block(PEB),但同样,您正在处理可能会发生变化的未记录结构。

php - 在 Windows 上使用 PHP fork /线程的最佳方法是什么?

我有一个php脚本,用于检查许多(数千)站点的更新。有时(随着站点数量的增加更频繁),我在更新其中一个站点时遇到执行超时,整个脚本都付诸东流了。我能想到的最好的想法是fork每个更新,所以如果它死了,整个更新就会继续。从我收集到的信息来看,PHP线程似乎不是什么值得依赖的东西,尤其是在Windows平台上(不幸的是我必须在Windows平台上工作)。我考虑过使用curl作为fork机制,但服务器的成本(时间和处理能力)会不会高得多?我很高兴听到一些关于PHPfork/线程的想法和经验...谢谢,奥马尔。 最佳答案 如果您打算使用cU

c++ - 为什么我的简单 hello world C++ 应用程序使用 3 个线程?

当我查看Windows任务管理器时,它说它正在使用3个线程?为什么是这样?我原以为只使用1个线程。我使用NetbeansIDE和MinGW-Windowsg++编译它。谢谢代码:#includeusingnamespacestd;intmain(){cout>input;return(EXIT_SUCCESS);} 最佳答案 也许Netbeans为内部目的放置了一些包装器?(调试、分析、...)无论如何,这并不重要,因为您没有创建它:这些线程不应干扰您的程序,您的程序也不会干扰它们。 关

C++/Windows : HeapAlloc() for contention-free per-thread heaps

我有一个使用boost::thread的多线程应用程序。出于性能原因,我希望每个线程都有一个独立的堆。我可以使用HeapCreate()创建一个堆,但不清楚如何将其连接到CRT库,以便new和malloc在创建的堆上分配内存。如何做到这一点? 最佳答案 Howcanthisbedone?如果不完全替换整个内存分配器就无法完成。例如可伸缩内存管理器Hoard正是这样做的。但是替换内存分配器并不适合胆小的人。如果您想通过HeapCreate使用每线程堆,并且合理包含您的分配/释放代码,那么您可以简单地调用HeapAlloc和HeapFr

windows - 在 Delphi 下终止应用程序时线程未终止

假设我有一个线程在应用程序终止时仍在运行(此线程无法终止,因为它等待Windowsapi调用返回这可能会很长......)如果应用程序关闭,线程会发生什么情况?它能引发异常吗(我在Delphi下)? 最佳答案 我会说异常(exception)是非常合理的。当您调用Application.Terminate时,这将导致以下事件序列:调用PostQuitMessage。Application.Terminated被设置为True。Application.Run返回。System.Halt被调用。运行退出过程,特别是DoneApplica

windows - mingw std::thread 与 Windows API

我开始使用C++11std::thread(mingw4.8)到目前为止一切顺利。我遇到了重叠I/O的情况,其中sleepEx用于将线程置于可警告的等待状态。这工作得很好,直到必须使用QueueUserAPC,它返回一个“无效句柄错误”。经过一番查找,发现std::thread使用的是Windows下的pthread库。有没有什么方法可以使用WindowsAPI调用,它需要一个带有std::thread的线程句柄?或者我是否需要坚持使用Windows线程来处理重叠I/O? 最佳答案 为了解决您的问题,MinGW-w64winpthr

c++ - 设计线程类

我有一个设计问题。为发送和接收定义单独的类是否更好。或者,定义单个Thread类是否更好?我喜欢单个Thread类的想法,因为它更容易共享可以被互斥锁锁定的队列。设计选项#1(独立):mySendThread=newSendThread();//HavethreadpropertiesandseparatemembersmyRcvThread=newRcvThread();//Havethreadpropertiesandseparatemembers设计选项#2(主):主线程-Execute(){if(threadType==RCV_THREAD){globalVar=newMast

windows - 什么会导致 C++Builder/Delphi 线程和应用程序无法关闭?

有一次,在测试期间,我的C++Builder/Delphi应用程序在后台工作线程中引发了一个未捕获的异常。EurekaLog如我所料,捕获了异常并发送了错误报告,一切似乎都正常。但是,当我关闭应用程序的主窗口时,某些东西仍在后台运行,因为该应用程序仍在任务管理器中列出(并且仍然有打开的资源)。我试图通过故意在后台工作线程中引入各种错误来重现这个问题,但我做不到。什么会导致线程和应用程序像这样继续运行,即使在主窗口关闭后(并且可能已调用PostQuitMessage)?如何确保应用程序始终正常关闭? 最佳答案 第一条规则是线程的主执行

c# - 如何从 C# 系统托盘应用程序将 C 程序作为线程运行?

我有一个C控制台应用程序,它曾经在Windows的CMD终端中的前台运行,并接受用户击键输入。但是,现在需要将其移至后台并且不需要用户输入。我已经创建了一个系统托盘,它是通过右键单击退出和右键单击关于来正确实现的。并有一个执行该功能的终端程序。我不想再次重写程序,而是希望能够创建一个线程来调用我现有程序中不需要终端的函数。只是为了强调这一点,控制台交互方面已从代码中删除,应用程序对击键的响应等也已从代码中删除。希望这能稍微澄清一些事情。问题:这可能吗?我将如何实现?(我通常不是使用更多嵌入式C的PC程序员,所以.NET对我来说很陌生。非常感谢任何帮助) 最佳