> I've noticed that ROOT version 2.00/11 for WinNT has problems with
> the new MSVCRT.DLL distributed with VC++ 6.0 on NT. For instance,
> using the new dll, attempting to divide a canvas by right clicking
> and filling in arguments causes a crash in the dll. This happens
> many other places as well.
I think it is ROOT "problem" rather the MS one.
I can not check it myself, since I have no VC++ 6.0 but I hope the
TPad::Divide can be changed as follows and it will help
The soil of this correction is to try to avoid touching
the global variable <gPad> from the concurrent working threads.
(Very likely the MS VC++ 6.0 DLL works just faster then that old one)
//_______________________________
void TPad::Divide(Int_t nx, Int_t ny, Float_t xmargin, Float_t ymargin, Int_t color)
{
//VF 02/10/98 TPad *padsav = (TPad*)gPad;
//VF 02/10/98 cd();
if (nx <= 0) nx = 1;
if (ny <= 0) ny = 1;
Int_t ix,iy;
Float_t x1,y1,x2,y2;
Float_t dy = 1/Float_t(ny);
Float_t dx = 1/Float_t(nx);
TPad *pad;
char *name = new char [strlen(GetName())+6];
Int_t n = 0;
if (color == 0) color = GetFillColor();
for (iy=0;iy<ny;iy++) {
y2 = 1 - iy*dy - ymargin;
y1 = y2 - dy + 2*ymargin;
if (y1 < 0) y1 = 0;
if (y1 > y2) continue;
TList *primitives = GetListOfPrimitives(); // VF 02/10/98
if (primitives ) { // VF 02/10/98
for (ix=0;ix<nx;ix++) {
x1 = ix*dx + xmargin;
x2 = x1 +dx -2*xmargin;
if (x1 > x2) continue;
n++;
sprintf(name,"%s_%d",GetName(),n);
pad = new TPad(name,name,x1,y1,x2,y2,color);
pad->SetNumber(n);
pad->SetMother(this); // VF 02/10/98 we need new method: TPad::SetMother(TPad *pad){fMother = pad;}
pad->setCanvas(GetCanvas()); // VF 02/10/98we need new method: TPad::SetCanvas(TPad *canvas){fCanvas = canvas;}
primitives->Add(pad);
}
}
delete [] name;
Modified();
Paint(); // VF 02/10/98
// VF 02/10/98 padsav->cd();
}
=================================================================
Dr. Valeri Faine (Fine)
------------------- Phone: +1 516 344 7806
Brookhaven National Laboratory FAX : +1 516 344 4206
Bldg. 510A /STAR mailto:fine@bnl.gov
Upton, New York, 11973-5000 http://nicewww.cern.ch/~fine
USA
Dr. Valery Fine Telex : 911621 dubna su
-----------
LCTA/Joint Inst.for Nuclear Res. Phone : +7 09621 6 40 80
141980 Dubna, Moscow region Fax : +7 09621 6 51 45
Russia mailto:fine@main1.jinr.dubna.su