Ignore:
Timestamp:
Nov 10, 2001, 1:47:48 PM (24 years ago)
Author:
sandervl
Message:

Implemented Get/SetProcessAffinityMask & SetThreadAffinityMask

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/oslibdos.cpp

    r7286 r7318  
    1 /* $Id: oslibdos.cpp,v 1.83 2001-11-05 15:00:36 sandervl Exp $ */
     1/* $Id: oslibdos.cpp,v 1.84 2001-11-10 12:47:46 sandervl Exp $ */
    22/*
    33 * Wrappers for OS/2 Dos* API
     
    28152815//******************************************************************************
    28162816//******************************************************************************
     2817BOOL OSLibDosSetThreadAffinity(DWORD dwThreadAffinityMask)
     2818{
     2819  static PROC_DosSetThreadAffinity pfnDosSetThreadAffinity = NULL;
     2820  static BOOL fInit = FALSE;
     2821  MPAFFINITY mask;
     2822
     2823    if(fInit == FALSE && pfnDosSetThreadAffinity == NULL) {
     2824        HMODULE hDoscalls;
     2825        if(DosQueryModuleHandle("DOSCALLS", &hDoscalls) == NO_ERROR) {
     2826            DosQueryProcAddr(hDoscalls, 564, NULL, (PFN *)&pfnDosSetThreadAffinity);
     2827        }
     2828        fInit = TRUE;
     2829    }
     2830    if(fInit && pfnDosSetThreadAffinity == NULL) {
     2831        SetLastError(ERROR_SUCCESS_W);
     2832        return TRUE;
     2833    }
     2834    APIRET rc;
     2835    USHORT sel = RestoreOS2FS();
     2836
     2837    mask.mask[0] = dwThreadAffinityMask;
     2838    mask.mask[1] = 0; //TODO: this might not be a good idea, but then again, not many people have > 32 cpus
     2839
     2840    rc = pfnDosSetThreadAffinity(&mask);
     2841    SetFS(sel);
     2842
     2843    SetLastError(error2WinError(rc,ERROR_INVALID_PARAMETER));
     2844    return (rc == NO_ERROR);
     2845}
     2846//******************************************************************************
     2847//******************************************************************************
     2848BOOL OSLibDosQueryAffinity(DWORD fMaskType, DWORD *pdwThreadAffinityMask)
     2849{
     2850  static PROC_DosQueryThreadAffinity pfnDosQueryThreadAffinity = NULL;
     2851  static BOOL fInit = FALSE;
     2852  MPAFFINITY mask;
     2853
     2854    if(fInit == FALSE && pfnDosQueryThreadAffinity == NULL) {
     2855        HMODULE hDoscalls;
     2856        if(DosQueryModuleHandle("DOSCALLS", &hDoscalls) == NO_ERROR) {
     2857            DosQueryProcAddr(hDoscalls, 563, NULL, (PFN *)&pfnDosQueryThreadAffinity);
     2858        }
     2859        fInit = TRUE;
     2860    }
     2861    if(fInit && pfnDosQueryThreadAffinity == NULL) {
     2862        *pdwThreadAffinityMask = 1;
     2863        SetLastError(ERROR_SUCCESS_W);
     2864        return TRUE;
     2865    }
     2866
     2867    ULONG scope = (fMaskType == MASK_SYSTEM) ? AFNTY_SYSTEM : AFNTY_THREAD;
     2868
     2869    APIRET rc;
     2870    USHORT sel = RestoreOS2FS();
     2871
     2872    rc = pfnDosQueryThreadAffinity(scope, &mask);
     2873    SetFS(sel);
     2874
     2875    if(rc == NO_ERROR) {
     2876        *pdwThreadAffinityMask = mask.mask[0];
     2877    }
     2878    SetLastError(error2WinError(rc,ERROR_INVALID_PARAMETER));
     2879    return (rc == NO_ERROR);
     2880}
     2881//******************************************************************************
     2882//******************************************************************************
Note: See TracChangeset for help on using the changeset viewer.