读书人

种成员函数中启动一个子线程可否在子

发布时间: 2013-08-04 18:26:16 作者: rapoo

类成员函数中启动一个子线程,可否在子线程中控制该函数的返回值?
子线程是用来监测系统内存使用情况的,希望在内存使用超出阈值时结束调用该线程的成员函数,并且希望能指定这种情况下的函数返回值。

该如何实现呢? 子线程
[解决办法]
使用Signal就好了。或者发送消息等
[解决办法]
你这个需求并非非要多线程才能解决,重载new再对内存使用情况进行簿记就行了。
[解决办法]

引用:
还是不清楚要怎样处理。再把问题明确下,请帮忙看看怎么解决:
int F1()
{
_beginthread();//启动内存监视线程,当内存占用超出一定阈值,希望能够停止F1中其它代码的执行,强制
F1返回某值
F2();//这是一个常规的函数调用,主要就是这个函数内的计算占用内存资源。此函数是某工具库的函数,不是
自己写的。
return 1;//F1正常结束时的返回值
}
主函数
main()
{
int f1 = F1();
if ( f1== ? ) //根据F1的返回值执行相应操作
{.....}
else
{......}
}


F1中用_beginthreadex() 创建了一个监视线程,这个线程有个回调函数,假设是 unsigned int __stdcall mon(......)
_beginthreadex() 返回一个HANDLE,假设是hd。
mon函数检测内存,并且有关闭F2()的能力。
发现内存占用超过的时候,mon杀掉或者通知F2返回,同时自己返回 return 1(或者其他什么数字,不要是正常返回的0就行)

在F1中:
HANDLE hd = _beginthreadex(..mon....);
F2();
//下面加入waitfor handle
WaitForSingleObject(hd, INFINTE); //等待线程mon返回
DWORD rvalue;
GetExitCodeThread(hd, &rvalue);
//调用正确的话rvalue就是刚才mon函数返回的值,

return rvalue; // 一般正常返回时0,不正常才是其他,你这里正常返回是1,所以mon返回可以是2或者其他的数字

这样main就可以根据F1返回值判断了。

读书人网 >C++

热点推荐