问题标签 [beginthreadex]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - DirectShow - 无法创建新线程
我在将 DirectShow 图形集成到现有应用程序中时遇到了一些奇怪的问题。
首先要介绍几件事:
- 该图的目的是从具有暴露 DirectShow 接口的 FrameGrabber 中获取原始视频。该图通过 VMR9 将视频正确显示,并通过 ISampleGrabber(DirectShow 示例)将原始帧暴露给某些算法。
- 该图已在单个项目中成功构建并运行。视频显示良好,一切都很愉快。
现在,当我将其集成到现有代码中时,问题就出现了。从应用程序的初始化开始,我首先创建并启动图形,在无窗口模式下运行 VMR9。在初始化的后期,我通过 _beginthreadex 创建了几个工作线程。当且仅当图形已构建并运行时,对 _beginthreadex 的调用失败并返回代码 12(内存不足)。
现在显而易见的答案是我内存不足或可能是其他一些资源。但是,当线程尝试启动时,我正在使用约 420MB 的 2GB 系统内存。线程堆栈大小已明确设置为 1MB。所以据我所知,我并没有失忆。此外,正在运行的应用程序中总共有 15 个线程,所以我并没有创造一个荒谬的数量。
有没有人遇到过与 DirectShow 类似的问题?我正在寻找任何输入,我们已经尝试调试这个问题很长一段时间了,但一直没有成功。
我将发布您需要的任何代码,与大多数 DirectShow 图表一样,代码很长。
编辑
按照要求。我不确定 DirectShow 代码的哪一部分导致线程无法启动。但是,如果我只构建而不运行图表,则线程可以正常工作。所以我猜想失败发生在运行调用之后。我运行图表的代码如下:
SetVMRSize 函数只是将 VMR 调整为其父窗口的大小:
值得注意的是,pWindowControllerIVMRWindowlessControl9
和 pMediaControl 是IMediaControl
编辑 2
使用 CreateThread 而不是 __beginthreadex 测试了代码。启动线程失败后,GetLastError() 返回:
8:没有足够的存储空间来处理这个命令。
创建线程的代码如下所示:
CreateThread 的一些参数:
c++ - 如何将 boost::shared_ptr 作为指向 Windows 线程函数的指针传递?
如何将 boost::shared_ptr 作为指向 Windows Thread 函数的指针传递?假设以下代码:
我认为这段代码不正确,你的想法是什么?我怎样才能做到这一点 ?
编辑:我通过 boost::weak_ptr 解决了我的问题。在此页面中检查我自己的答案
c++ - 具有多线程成员函数的类
我有一个类,我试图将它的一些成员函数转换为在不同的线程中运行。虽然程序没有问题,但它在尝试从图像缓冲区(由不同的线程更新)读取时崩溃。似乎问题是由 _beginthread 中的参数传递错误引起的。
下面的代码片段应该更清楚地解释我想要做什么。基本上我想要完成的是让成员函数“fillBuffer”填充图像缓冲区,而其余程序正在做其他事情,包括同时读取相同的图像缓冲区。
非常感谢任何有关语法的帮助。
c++ - C++:_beginthreadex,线程函数名称未显示在 Visual Studio 线程窗口中
我最近了解到这::_beginthreadex()
总是更可取::CreateThread()
,因此我更改了所有使用的调用::CreateThread()
。
唯一的缺点是我不再在 Visual Studio 的Threads
窗口中看到线程函数的名称,因此很难快速识别线程。我假设这是在我使用时由调试器自动完成的::CreateThread()
,因为参数完全相同,我只是更改了所用函数的名称。
有什么方法可以继续使用并在Visual Studio 的窗口中::_beginthreadex()
查看线程的名称?Threads
c++ - _beginthreadex() 成功后我可以立即调用 CloseHandle() 吗?
我对使用从_beginthreadex()
. 立即调用CloseHandle()
它是否安全?
我相信必须这样做以避免内存泄漏。
c++ - 无法使用 _beginthreadex 编译 C++ 程序
我无法运行该程序。我收到此错误,我不明白:
错误 1 错误 C2664: '_beginthreadex' : 无法将参数 3 从 'unsigned int (__stdcall *)(void)' 转换为 'unsigned int (__stdcall *)(void *)'32
我不小心在网上搜索了一个多小时以找到解决方案,因此非常希望您能提供帮助。
c++ - _beginthreadex 无法从“重载功能”转换
所以我正在制作一个函数来打印跨不同窗口分层的文本,我希望它位于一个单独的线程中,这样我就可以运行一个计时器来显示文本,同时让用户打开以继续使用该程序。但是,当我编译时出现此错误:
这是主要的cpp文件:
这是头文件 Trial.h:(有点草率,但工作正常,因为大多数显示器的更新时间约为 2 毫秒,sleep(2) 应该有助于防止闪烁)。
我查看了多个示例,检查了语法,并确保我没有搞砸 _beginthreadex,但似乎找不到问题的原因:|
c++ - _beginthreadex 的参数类型错误
要定义我的头文件中的线程:
然后在我的 cpp 文件中,我有:
并调用这个线程我使用
但我有一个错误的&PerformLogin
说法是:
unsigned int (__stdcall HttpClient:: )(void ) 类型的参数与参数 unsigned int (__stdcall*)(void*) 不兼容。
我理解这个错误,但我真的不知道如何解决这个问题!
c++ - 将多个参数传递给 _beginThreadEx
是否可以将多个参数传递给 beginthreadex?
我知道我可以创建一个类或结构,但是如果我有一些不相关的数据我不想合并到一个类或结构中怎么办?
Boost库似乎允许多个参数,但我将如何为标准c ++ _beginThreadEx做多个参数?
parameters - 将结构传递给 _beginThreadEx() 函数会产生意外输出
我正在尝试学习将多个参数传递给 _beginThreadEx 函数的“正确”方式。可以使用一些帮助。
在函数 myThread.
我不断将 1、3 或 5 附加到 *x->value 的输出中
另外...如果我放置
前
有时没有输出 Hello World,所以我把它放在上面的行之后。