Roger,
I am using your example and have for a while. A new client has 16 cpu's`Can that be handled by increasing the vars.
LOCAL nHnd := 0 // file handle
LOCAL nLast := 1 // last CPU used
LOCAL aSet := {} // processor array
LOCAL nSet // default new bitmask
LOCAL i // counter
//DEFAULT cFile := GetEnv('WINDIR') + '\Temp\SetCpu.Smp'
DEFAULT cFile := vdrive+"\oiswin\SetCpu.Smp"
DEFAULT nCPU := 15
// 15 = 4 CPUs
// 7 = 3 CPUs
// 3 = 2 CPUs
// 1 = 1 CPU
nSet := nCPU
FOR i := 1 to 32 // count processors
IF nCPU // processor present
aadd(aSet, i) // add processor id to list
ENDIF
NEXT
IF len(aSet) > 1 // more then one processor
IF Fexists(cFile)
nHnd := Fopen(cFile, FO_READWRITE)
IF nHnd > 0 // file is open
nLast := Val(Freadstr(nHnd, 2))+ 1 // get last processor
IF nLast > len(aSet) // check against available processors
nLast := 1 // recycle number
ENDIF
Fseek(nHnd, 0, FS_SET) // place pointer at bof
Fwrite(nHnd, StrZero(nLast, 2)) // write to file
Fclose(nHnd) // close file
ENDIF
ELSE // first time round
nHnd := Fcreate(cFile, FC_NORMAL)
IF nHnd > 0 // file is created and open
Fwrite(nHnd, StrZero(nLast, 2)) // write to file
Fclose(nHnd) // close file
ENDIF
ENDIF
FOR i := 1 to 32 // create new bitmask
nSet := (i = aSet[nLast]) // switch on appropriate bit
NEXT
DllCall("xpprt1.dll", DLL_CDECL, "_sysSetCPU", nSet)
ENDIF
RETURN nil
Thanks
Fred
Omni
cd_setcpu
Re: cd_setcpu
I am not sure.A new client has 16 cpu's`Can that be handled by increasing the vars.
It depends on the undocumentated Xbase++ function _sysSetCPU().
Xbase++ 2.0 has two new functions: SetLogicalProcessor() and GetLogicalProcessor().
Possibly they wrote these functions to handle more CPUs.
The eXpress train is coming - and it has more cars.
Re: cd_setcpu
Tested and it appears anything over 4 goes back to cpu 1.
Will check out those new features when i get a chance.
thanks
Will check out those new features when i get a chance.
thanks
Re: cd_setcpu
hm ... how did you test ?omni wrote:Tested and it appears anything over 4 goes back to cpu 1.
try original Alaska Sample c:\ALASKA\XPPW32\SOURCE\samples\solution\smp\smprun.prg with these Value
Code: Select all
2 ^ (x-1)
//
1 = 1. CPU
2 = 2. CPU
4 = 3. CPU
8 = 4. CPU
16 = 5. CPU
32 = 6. CPU
64 = 7. CPU
128 = 8. CPU
// while i have only 8 CPU more not tested
256 = 9. CPU
512 = 10. CPU
1024 = 11. CPU
2048 = 12. CPU
4096 = 13. CPU
8192 = 14. CPU
16384 = 15. CPU
32768 = 16. CPU
greetings by OHR
Jimmy
Jimmy