草庐IT

Tread多线程

全部标签

c++ - 如何在动态加载的 DLL 中正确实现 (C++) 线程本地存储?

在这种情况下,我动态加载的DLL由Windows资源管理器加载,以便将新的属性表(新选项卡)添加到文件/文件夹属性页面。一个简单的例子是StrmExt.dll(downloadsource)。在此示例中(源由Microsoft提供),DLL不使用线程本地存储(TLS),因此在同时加载多个属性页时会导致严重问题。查看源代码后,DLL需要一个线程基变量(文件的文件路径)...staticTCHARg_szFile[MAX_PATH];将这一行代码更改为:_declspec(thread)TCHARg_szFile[MAX_PATH];...使DLL支持多线程,因此支持属性表的多个实例。但是

c++ - 我可以从不同的线程调用 socket send() 吗?

如果我有一个名为s的socket,我可以在不同的线程中执行此操作吗:线程1:send(s,"HellofromThread1");线程2:send(s,"HellofromThread2");是否保证这两个字符串会一个接一个地放入发送缓冲区(我不关心哪个先放),或者它们是否有可能混在一起?注意:也许这个问题的标题应该是:“Issocketsend()threadsafe”(但我不太确定线程安全是什么意思). 最佳答案 答案是否定的。一般来说,send()不保证数据是整block发送的。您始终需要检查send()返回的值,以了解实际发

我可以在特定地址创建一个堆栈的线程吗?

我正在做一些实验,想知道是否可以在我提供的特定地址创建一个线程堆栈,或者至少让线程堆栈只在我可以指定的某个(巨大的)虚拟内存区域中产生.我对此感兴趣的原因是我想在某个时候将整个堆栈复制到远程进程并且需要指针保持完整,并且线程堆栈不会发生冲突。这可能不是最好/最安全的方法,我知道,但这只是一个小小的爱好项目。如果您知道如何在Linux上执行此操作,我也对此很感兴趣。 最佳答案 只是编译评论所说的内容。Forwindows,theanswerisno对于Unix(posix),答案是pthread_attr_setstack.(另见上面

windows - 用于 I/O 的最新 Windows 线程池 API 用法

我不明白最新的Windows线程池API的一部分。我需要这方面的帮助。从文档中,将其用于I/O(在我的情况下,用于SOCKET)的方法可以总结如下:调用CreateThreadpoolIo。调用StartThreadpoolIo.您可以在那里找到此警告:YoumustcallthisfunctionbeforeinitiatingeachasynchronousI/OoperationonthefilehandleboundtotheI/Ocompletionobject.FailuretodosowillcausethethreadpooltoignoreanI/Ooperation

windows - 关闭事件对象是否会导致等待该对象的线程唤醒?

假设我有一个Windows事件对象,例如从调用CreateEvent。线程A在WaitForSingleObject(event_handle)中被阻塞。线程B调用CloseHandle(event_handle)。问题一:线程A发生了什么?问题2:如果线程A在WaitForMultipleObjects中被阻塞,会有什么不同吗?WaitForMultipleObjects返回什么? 最佳答案 根据实验,如果句柄关闭,WaitForSingleObject似乎不会唤醒,即线程A一直在等待。我没有检查过,但我假设WaitForMult

windows - 如何在 COM 组件中创建线程?

我有一个在COM服务中实例化的COM组件(此.exe正在运行)。我有十个客户。每个客户端都从ROT获取接口(interface)(IXyz)指针并同时调用方法IXyz::abc()。根据我的跟踪,我看到IXyz::abc()同时被调用了10次,但是在10个不同的线程中。谁在创建这10个线程? 最佳答案 如果您仔细想想,COM的行为是有道理的。代码在服务进程内部执行。如果将类标记为在单线程单元中运行,则一次只有一个线程执行。并发调用堆积在消息qeueu中,一次执行一个。如果指定了多线程单元,则代码可以并发执行。为了在运行过程中完成此操

c# - 沙盒 AppDomain 中的线程安全

我有一个应用程序域来托管不受信任的代码/程序集。我用安全属性解决了所有安全问题,而且效果很好。不受信任的代码在专用线程上运行。CLR是2.0。这就是我的AppDomainShellAppDomainSeed,Shell在主域中运行,seed是不受信任域中的受信任代理/助手。我有兴趣限制创建新线程和更改优先级。目前,我不受信任的程序集可以设置ThreadPriority.Highest或通过创建10k线程来终止操作系统。有SecurityPermissionFlag.ControlThread但这只会阻止像Abort()这样的高级操作。我正在查看Thread类实现,对于那些简单的操作,它

windows - 更改线程 session ID

如何在不同的session中启动线程?我需要从非交互式session(session0)中的服务启动交互式session(session1)中的线程。我之前通过使用SetTokenInFormation和DuplicateTokenEx然后将其传递给CreateProcessAsUser来完成此过程。我希望我可以做同样的事情,除了使用SetThreadToken而不是CreateProcessAsUser。 最佳答案 线程不属于session,进程属于。您需要在另一个session中创建一个进程来托管您想要的线程。

c++ - 线程模拟的多级使用

我在使用一些很久以前编写的执行线程级模拟和进程生成的类时遇到了一些问题。问题似乎是我对这些实用程序类的使用超出了其他任何人尝试使用它们的范围。第一个通过使用OpenThreadToken和DuplicateToken以及ImpersonateLoggedOnUser进行线程级模拟。第二次尝试使用CreateProcessAsUser和通过OpenThreadToken/DuplicateToken获得的token创建进程。我遇到的问题是:Thread1runninginIISwiththecorrectuserThread2thatiscreatedbyThread1-whichisi

c++ - 子窗口中的多线程 OpenGL

我正在尝试构建一个即使在调整主窗口大小或移动时也能响应的OpenGL应用程序。我发现的最合乎逻辑的解决方案是在呈现OpenGL的单独线程中创建一个子窗口和一个消息泵。它可以根据需要在帧之间调整自身大小。主要消息泵和窗口框架在主进程中运行。它在某种程度上非常有效。可以移动窗口、使用菜单和调整大小,而不会影响子窗口的帧速率。SwapBuffers()是一切分崩离析的地方。SwapBuffers()以这种方式运行时,似乎是在软件模式下运行。它不再保持在60FPS以匹配我的显示器的VSync,当窗口约为100x100时它会跳到数百,而当最大化到1920x1080时它会下降到20FPS。在单线程