我一直在开发我的项目,它适用于很多线程。它还有一个非常大的问题 - 内存泄漏。
我“撕掉”远离其代码的一些片段并简化它们,因此,很容易理解它的作用。代码是在 c ++ 上编写的,它是一个控制台应用程序,所以这段代码应该适用于任何人的工作室。这是:
#include <afxwin.h>
#include <map>
#include <list>
#include <vld.h>
using namespace std;
int t = 1;
static map<const int, pair<void *, int>> Buffer;
list<int> ret;
void func(int * y)
{
while (t)
{
if (!Buffer[*y].first)
{
ret.push_back(*y);
Buffer[*y].first = y;
};
}
return;
}
UINT Object_Thread(LPVOID pParam)
{
func((int *) pParam);
return 0;
};
void main()
{
long i = 150;
int * p1 = new int (1);
int * p2 = new int (2);
Buffer[1].first = NULL;
Buffer[2].first = NULL;
AfxBeginThread(Object_Thread,p1);
AfxBeginThread(Object_Thread,p2);
while (i-->0)
{
if (Buffer[1].first)
{
ret.push_back(0);
Buffer[1].first = NULL;
}
if (Buffer[2].first)
{
ret.push_back(0);
Buffer[2].first = NULL;
}
}
t = 0; i = 100000;
while (i-->0)
{}
delete p1, p2;
return;
};
最后,main()
应该将控制权返回给系统,我放while()
,只给线程足够的时间来完成。任务是,“ret”应该包含来自main()函数和2个func()函数的数字,并且“0”数字应该跟随“1”或“2”或它们两者,然后,“1”或“预计2“会再次出现,这就是系统应该如何工作的。
这是一种有点切换器,它允许你给缓冲区一些值,然后另一个线程必须接受它,并为下一个数据释放缓冲区。但是在测试期间我得到的东西就像1 2 0 0 0 0 0 2 0 0 0 0 0 2 0 0 ...,所以,很多次都遇到了0,但是,由于概念,它应该连续最多2“零”。
我的代码出了什么问题?