请问:TMultiReadExclusiveWriteSynchronizer和TCriticalSection可以嵌套使用吗?
admin 发表于 2010-04-21 | 来源:互联网 | 阅读:
如题:
如:
TCriticalSection cs = new TCriticalSection();
cs->Acquire();
…
fun(cs);
…
cs->Release();
delete cs;
void fun( TCriticalSection *cs )
{
…
cs->Acquire();
…
…
cs->Release();
return;
}
谢谢

嵌套用没什么意义
主要是函数里的文件读写也要用TCriticalSection锁阿,另外:频繁使用AnsiString是不是会造成OutMemory?如下:TIniFile *piniFile = new TIniFile(ExtractFilePath(Application->ExeName) +"test.ini");AnsiString strDevName = piniFile->ReadString("设","00","未知");AnsiString strlimit = piniFile->ReadString("状态","0002"," , , , ");short nPrtPos=strlimit.Pos(",");strlimit = strlimit.SubString(nPrtPos+1,strlimit.Length()-nPrtPos);nPrtPos=strlimit.Pos(",");AnsiString strStatusName = strlimit.SubString(0, nPrtPos-1);strlimit = strlimit.SubString(nPrtPos+1,strlimit.Length()-nPrtPos);nPrtPos=strlimit.Pos(",");strlimit = strlimit.SubString(nPrtPos+1,strlimit.Length()-nPrtPos);….delete piniFile;我要经常做这种操作,是不是在多线程中有问题?谢谢
怎么没人回答阿?帮忙顶起来啊
人气这么差?郁闷阿
值得思考 ManOfBCB
最外面的cs->Acquire()和cs->Release()就可以了,没有必要嵌套的。AnsiString 调用不会出现outMemory,你可以把它看成是一个类。
AnsiString频繁调用有可能导致OutMemory,这个你可以用try…catch()就知道了,在程序代码中用到一次String将会生成大量相同的代码段!当String被作为参数以对象的形式传递或返回时,代码膨胀非常明显.尽量避免函数返回String类型的对象(其他对象也一样),避免频繁构造和析构对象,也避免代码冗余膨胀。
AnsiString频繁操作会产生OutMemory,但是这个现象却是一种随机想象,我以前做了个软件,是响应windows消息,对AnsiString进行文字分离和提取操作,在操作非常频繁时就会抛出异常,如果没用try…catch()语句的话,我还真不知道对AnsiString进行频繁操作会造成OutMemory