⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 win32.cxx

📁 pwlib源码库
💻 CXX
📖 第 1 页 / 共 4 页
字号:
void PProcess::SignalTimerChange(){  deleteThreadMutex.Wait();  if (houseKeeper == NULL)    houseKeeper = new HouseKeepingThread;  else    houseKeeper->breakBlock.Signal();  deleteThreadMutex.Signal();}///////////////////////////////////////////////////////////////////////////////// PProcessPProcess::~PProcess(){  // do whatever needs to shutdown  PreShutdown();  Sleep(100);  // Give threads time to die a natural death  // Get rid of the house keeper (majordomocide)  delete houseKeeper;  // OK, if there are any left we get really insistent...  activeThreadMutex.Wait();  for (PINDEX i = 0; i < activeThreads.GetSize(); i++) {    PThread & thread = activeThreads.GetDataAt(i);    if (this != &thread && !thread.IsTerminated())      TerminateThread(thread.GetHandle(), 1);  // With extreme prejudice  }  activeThreadMutex.Signal();  deleteThreadMutex.Wait();  autoDeleteThreads.RemoveAll();  deleteThreadMutex.Signal();#if PMEMORY_CHECK || _DEBUG  extern void PWaitOnExitConsoleWindow();  PWaitOnExitConsoleWindow();#endif}PString PProcess::GetOSClass(){  return "Windows";}PString PProcess::GetOSName(){  OSVERSIONINFO info;  info.dwOSVersionInfoSize = sizeof(info);  GetVersionEx(&info);  switch (info.dwPlatformId) {    case VER_PLATFORM_WIN32s :      return "32s";#ifdef VER_PLATFORM_WIN32_CE    case VER_PLATFORM_WIN32_CE :      return "CE";#endif    case VER_PLATFORM_WIN32_WINDOWS :      if (info.dwMinorVersion < 10)        return "95";      if (info.dwMinorVersion < 90)        return "98";      return "ME";    case VER_PLATFORM_WIN32_NT :      if (info.dwMajorVersion < 5)        return "NT";	  else if (info.dwMinorVersion == 0) 		return "2000";	  else if (info.dwMinorVersion == 1)		return "XP";	  else        return "Server 2003";  }  return "?";}PString PProcess::GetOSHardware(){  SYSTEM_INFO info;  GetSystemInfo(&info);  switch (info.wProcessorArchitecture) {    case PROCESSOR_ARCHITECTURE_INTEL :      switch (info.dwProcessorType) {        case PROCESSOR_INTEL_386 :          return "i386";        case PROCESSOR_INTEL_486 :          return "i486";        case PROCESSOR_INTEL_PENTIUM :          return "i586";      }      return "iX86";    case PROCESSOR_ARCHITECTURE_MIPS :      return "mips";    case PROCESSOR_ARCHITECTURE_ALPHA :      return "alpha";    case PROCESSOR_ARCHITECTURE_PPC :      return "ppc";  }  return "?";}PString PProcess::GetOSVersion(){  OSVERSIONINFO info;  info.dwOSVersionInfoSize = sizeof(info);  GetVersionEx(&info);  WORD wBuildNumber = (WORD)info.dwBuildNumber;  return psprintf(wBuildNumber > 0 ? "v%u.%u.%u" : "v%u.%u",                  info.dwMajorVersion, info.dwMinorVersion, wBuildNumber);}PDirectory PProcess::GetOSConfigDir(){#ifdef _WIN32_WCE	return PString("\\Windows");#else	  OSVERSIONINFO info;  info.dwOSVersionInfoSize = sizeof(info);  GetVersionEx(&info);  char dir[_MAX_PATH];  if (info.dwPlatformId != VER_PLATFORM_WIN32_NT) {    PAssertOS(GetWindowsDirectory(dir, sizeof(dir)) != 0);    return dir;  }  PAssertOS(GetSystemDirectory(dir, sizeof(dir)) != 0);  PDirectory sysdir = dir;  return sysdir;  //+ "drivers\\etc";#endif}PString PProcess::GetUserName() const{  PString username;  unsigned long size = 50;#ifndef _WIN32_WCE  ::GetUserName(username.GetPointer((PINDEX)size), &size);#else  TCHAR wcsuser[50] = {0};  HKEY hKeyComm, hKeyIdent;  RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Comm"), 0, 0, &hKeyComm);  RegOpenKeyEx(hKeyComm, _T("Ident"), 0, 0, &hKeyIdent);  DWORD dwType = REG_SZ; DWORD dw = 50;  if( ERROR_SUCCESS != RegQueryValueEx(	  hKeyIdent, _T("Username"), NULL, &dwType, (LPBYTE) wcsuser, &dw) 	  || !*wcsuser )  {	RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Ident"), 0, 0, &hKeyIdent);	dw = 50L;	if( ERROR_SUCCESS == RegQueryValueEx( 		hKeyIdent, _T("Name"), NULL, &dwType, (LPBYTE) wcsuser, &dw))			wcscat( wcsuser, _T(" user") ); // like "Pocket_PC User"  }    USES_CONVERSION;  username = T2A(wcsuser);#endif  username.MakeMinimumSize();  return username;}BOOL PProcess::SetUserName(const PString & username, BOOL){  if (username.IsEmpty())    return FALSE;  PAssertAlways(PUnimplementedFunction);  return FALSE;}PString PProcess::GetGroupName() const{  return "Users";}BOOL PProcess::SetGroupName(const PString & groupname, BOOL){  if (groupname.IsEmpty())    return FALSE;  PAssertAlways(PUnimplementedFunction);  return FALSE;}DWORD PProcess::GetProcessID() const{  return GetCurrentProcessId();}BOOL PProcess::IsServiceProcess() const{  return FALSE;}BOOL PProcess::IsGUIProcess() const{  return FALSE;}///////////////////////////////////////////////////////////////////////////////// PSemaphorePSemaphore::PSemaphore(HANDLE h){  handle = h;  PAssertOS(handle != NULL);}PSemaphore::PSemaphore(unsigned initial, unsigned maxCount){  initialVal  = initial;  maxCountVal = maxCount;  if (initial > maxCount)    initial = maxCount;  handle = CreateSemaphore(NULL, initial, maxCount, NULL);  PAssertOS(handle != NULL);}PSemaphore::PSemaphore(const PSemaphore & sem){  initialVal  = sem.GetInitialVal();  maxCountVal = sem.GetMaxCountVal();  if (initialVal > maxCountVal)    initialVal = maxCountVal;  handle = CreateSemaphore(NULL, initialVal, maxCountVal, NULL);  PAssertOS(handle != NULL);}PSemaphore::~PSemaphore(){  if (handle != NULL)    PAssertOS(CloseHandle(handle));}void PSemaphore::Wait(){  PAssertOS(WaitForSingleObject(handle, INFINITE) != WAIT_FAILED);}BOOL PSemaphore::Wait(const PTimeInterval & timeout){  DWORD result = WaitForSingleObject(handle, timeout.GetInterval());  PAssertOS(result != WAIT_FAILED);  return result != WAIT_TIMEOUT;}void PSemaphore::Signal(){  if (!ReleaseSemaphore(handle, 1, NULL))    PAssertOS(GetLastError() != ERROR_INVALID_HANDLE);  SetLastError(ERROR_SUCCESS);}BOOL PSemaphore::WillBlock() const{  PSemaphore * unconst = (PSemaphore *)this;  if (!unconst->Wait(0))    return TRUE;  unconst->Signal();  return FALSE;}///////////////////////////////////////////////////////////////////////////////// PMutexPMutex::PMutex()  : PSemaphore(::CreateMutex(NULL, FALSE, NULL)){}PMutex::PMutex(const PMutex &)  : PSemaphore(::CreateMutex(NULL, FALSE, NULL)){}void PMutex::Signal(){  PAssertOS(::ReleaseMutex(handle));}///////////////////////////////////////////////////////////////////////////////// PSyncPointPSyncPoint::PSyncPoint()  : PSemaphore(::CreateEvent(NULL, FALSE, FALSE, NULL)){}PSyncPoint::PSyncPoint(const PSyncPoint &)  : PSemaphore(::CreateEvent(NULL, FALSE, FALSE, NULL)){}void PSyncPoint::Signal(){  PAssertOS(::SetEvent(handle));}///////////////////////////////////////////////////////////////////////////////// PDynaLinkPDynaLink::PDynaLink(){  _hDLL = NULL;}PDynaLink::PDynaLink(const PString & name){  Open(name);}PDynaLink::~PDynaLink(){  Close();}PString PDynaLink::GetExtension(){  return ".DLL";}BOOL PDynaLink::Open(const PString & name){#ifdef UNICODE  USES_CONVERSION;  _hDLL = LoadLibrary(A2T(name));#else  _hDLL = LoadLibrary(name);#endif  return _hDLL != NULL;}void PDynaLink::Close(){  if (_hDLL != NULL) {    FreeLibrary(_hDLL);    _hDLL = NULL;  }}BOOL PDynaLink::IsLoaded() const{  return _hDLL != NULL;}PString PDynaLink::GetName(BOOL full) const{  PFilePathString str;  if (_hDLL != NULL) {#ifdef UNICODE	TCHAR path[_MAX_PATH];    GetModuleFileName(_hDLL, path, _MAX_PATH-1);    str=PString(path);#else    GetModuleFileName(_hDLL, str.GetPointer(_MAX_PATH), _MAX_PATH-1);#endif    if (!full)     {      str.Delete(0, str.FindLast('\\')+1);      PINDEX pos = str.Find(".DLL");      if (pos != P_MAX_INDEX)        str.Delete(pos, P_MAX_INDEX);    }  }  str.MakeMinimumSize();  return str;}BOOL PDynaLink::GetFunction(PINDEX index, Function & func){  if (_hDLL == NULL)    return FALSE;#ifndef _WIN32_WCE   FARPROC p = GetProcAddress(_hDLL, (LPSTR)(DWORD)LOWORD(index));#else FARPROC p = GetProcAddress(_hDLL, (LPTSTR)(DWORD)LOWORD(index));#endif  if (p == NULL)    return FALSE;  func = (Function)p;  return TRUE;}BOOL PDynaLink::GetFunction(const PString & name, Function & func){  if (_hDLL == NULL)    return FALSE;#ifdef UNICODE  USES_CONVERSION;  FARPROC p = GetProcAddress(_hDLL, A2T(name));#else  FARPROC p = GetProcAddress(_hDLL, name);#endif  if (p == NULL)    return FALSE;  func = (Function)p;  return TRUE;}///////////////////////////////////////////////////////////////////////////////// PDebugStreamPDebugStream::PDebugStream()  : ostream(&buffer){}PDebugStream::Buffer::Buffer(){  setg(buffer, buffer, &buffer[sizeof(buffer)-2]);  setp(buffer, &buffer[sizeof(buffer)-2]);}int PDebugStream::Buffer::overflow(int c){  int bufSize = pptr() - pbase();  if (c != EOF) {    *pptr() = (char)c;    bufSize++;  }  if (bufSize != 0) {    char * p = pbase();    setp(p, epptr());    p[bufSize] = '\0';#ifdef UNICODE    USES_CONVERSION;    OutputDebugString(A2T(p));#else    OutputDebugString(p);#endif  }  return 0;}int PDebugStream::Buffer::underflow(){  return EOF;}int PDebugStream::Buffer::sync(){  return overflow(EOF);}// End Of File ///////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -