- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
下面的代码是我的整个测试程序。每次我按 ENTER 时,进程使用的 RAM 都会增加 4k(它会不断增加,不会停止;我在任务管理器中看到它)。怎么了? _beginthread 也会发生同样的事情。
我正在尝试编写一个服务器,我想用一个线程处理每个连接。 (请注意,这意味着我无法加入线程,因为这将暂停主线程接受新连接。)
unsigned __stdcall thread_test(void *)
{
for(int i = 0; i < 10000; i++)
{
i+=1;
i-=1;
} //simulating processing
_endthreadex( 0 );
}
int main()
{
HANDLE hThread;
while(1)
{
getchar();
hThread = (HANDLE)_beginthreadex( NULL, 0, thread_test, 0, 0, NULL );
CloseHandle( hThread );
}
}
使用代码块和 visual studio 编译。
编辑:我做了一些测试,一旦内存达到 133.000K 左右,内存就会停止填满(程序启动时,内存约为 800k);但是在这个阶段,程序的运行速度比开始时慢了 4-5 倍(更高的内存 - 程序运行速度更慢),所以我的服务器这样运行并不是一件好事。
编辑 2:我有 Visual Studio 2013,问题消失了。
编辑 3:如果我在 Visual Studio 2013 中测试上面的代码,它没有泄漏。但是如果我将 beginthreadex 与一个小的服务器代码一起使用,它会像以前一样给我泄漏,每个请求都提供 4k。这是我使用的服务器测试代码(它什么都不做,只是看到它泄漏内存)http://pastebin.com/EDmJXkZU .您可以通过在浏览器的地址栏中输入您的 IP 来编译和测试它。
最佳答案
任务管理器不显示您的程序使用的 RAM。为了更好地查看,请使用任务管理器的资源监视器并观察专用字节指示。但是所有内存监视器只显示“虚拟内存”,它通常由运行时库保留,而不是释放回 Windows。你没有真正的问题。
关于c++ - _beginthreadex 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23584301/
要定义我的头文件中的线程: class HttpClient { public: ... unsigned int __stdcall PerformLogin(void*);
下面的代码是我的整个测试程序。每次我按 ENTER 时,进程使用的 RAM 都会增加 4k(它会不断增加,不会停止;我在任务管理器中看到它)。怎么了? _beginthread 也会发生同样的事情。
如何创建静态成员函数的线程例程 class Blah { static void WINAPI Start(); }; // .. // ... // .... hThread = (HAND
我目前正在调试一个多线程应用程序,它运行时没有错误,直到某些函数被调用了大约 2000 次。之后应用程序停止响应,我可以追踪到 _beginthreadex 因内存不足错误而失败。 在 Process
是否可以向 beginthreadex 传递多个参数? 我知道我可以创建一个类或结构,但如果我有不相关的数据片段我不想合并到一个类或结构中怎么办? Boost 库似乎允许多个参数,但我该如何为标准 c
我正在尝试使用 _beginthreadex 进行一些基本的并行化,并按照我给出的示例传递参数,但它不起作用。 有什么想法吗? #include #include void MyThread(vo
我不确定我是否以正确的方式解决这个问题,但我正在使用 C++ 和 Visual Studio 2013 中的成员函数和线程。 我发现的其他答案说我必须将我的成员函数转换为静态函数,这样我就可以创建该线
我有点困惑为什么 _beginthreadex() 没有启动我的线程。基本上,我有一个线程: 编辑 #3 -- 添加了 while() 作为我代码的一部分,但我最初从未声明过,因此该线程必须始终运行,
我想将 HANDLE 和 HWND 变量传递给 _beginthreadex 函数,我不想将这些变量设置为全局变量。 这就是我试过的: int APIENTRY WinMain(HINSTANCE h
我用分析器检查了一个项目的源代码。我是 C++ 新手。 它告诉我应该使用 Use _beginthreadex/_endthreadex 函数而不是 CreateThread/ExitThread 函
我有一个丑陋的 C 代码(我是 Windows 下 C 的新手)不要评判我......我想让它成为多线程,它从我的网络服务器列表中读取并检查它们是否存在,因为牢度我需要它是多线程的。搜索了很多谷歌和
大家好,这是我的代码 #include "StdAfx.h" #include #include #include unsigned int __stdcall threadproc(void
我最近了解到 ::_beginthreadex() 总是优于 ::CreateThread(),所以我更改了所有使用 ::CreateThread 的调用()。 唯一的缺点是我不再在 Visual S
我正在尝试将项目从 VS2008 转换为 VS2013,我遇到的(众多)问题之一是: c:\program files (x86)\microsoft visual studio 12.0\vc\at
我有一堆 QWebViews 渲染到一个小部件上。有一点我开始收到错误 QThread::start: Failed to create thread (The access code is inva
所以我制作了一个函数来打印跨不同窗口分层的文本,我希望它在一个单独的线程中,这样我就可以运行一个计时器来显示文本,同时让用户保持打开状态以继续使用该程序。但是,当我编译时出现此错误: error C2
#include #include #include //#include "windowstate.cpp" //DWORD WINAPI MyThreadFunction( LPVOID l
我试图了解 CreateThread 和 _beginthreadex 之间的区别,以及为什么调用 DisableThreadLibraryCalls 只会阻止使用 安装的线程_beginthread
我对使用从 _beginthreadex() 返回的句柄不感兴趣。立即对其调用 CloseHandle() 是否安全? 我认为必须这样做以避免内存泄漏。 最佳答案 是的,您可以在决定不再需要该句柄后立
我正在尝试将一些代码移植到 64 位,但似乎 _beginthreadex 中的线程 address 标识符是 unsigned int这是 32 位的,我无法从函数传递/接收 64 位的 addre
我是一名优秀的程序员,十分优秀!