mirror of
https://github.com/reactos/reactos.git
synced 2024-09-06 19:02:32 +00:00
156 lines
4.4 KiB
C
156 lines
4.4 KiB
C
![]() |
/*
|
||
|
* ReactOS winfile
|
||
|
*
|
||
|
* worker.c
|
||
|
*
|
||
|
* Copyright (C) 2002 Robert Dickenson <robd@reactos.org>
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License as published by
|
||
|
* the Free Software Foundation; either version 2 of the License, or
|
||
|
* (at your option) any later version.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with this program; if not, write to the Free Software
|
||
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||
|
*/
|
||
|
|
||
|
#ifdef _MSC_VER
|
||
|
#include "stdafx.h"
|
||
|
#else
|
||
|
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||
|
#include <windows.h>
|
||
|
#include <commctrl.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <malloc.h>
|
||
|
#include <memory.h>
|
||
|
#include <tchar.h>
|
||
|
#include <process.h>
|
||
|
#include <stdio.h>
|
||
|
#endif
|
||
|
|
||
|
#include <windowsx.h>
|
||
|
#include <process.h>
|
||
|
#include <assert.h>
|
||
|
#define ASSERT assert
|
||
|
|
||
|
#include "main.h"
|
||
|
#include "worker.h"
|
||
|
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// Global Variables:
|
||
|
//
|
||
|
|
||
|
static HANDLE hMonitorThreadEvent = NULL; // When this event becomes signaled then we run the monitor thread
|
||
|
|
||
|
void MonitorThreadProc(void *lpParameter);
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// Local module support methods
|
||
|
//
|
||
|
|
||
|
|
||
|
LRESULT CALLBACK MoveDialogWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||
|
{
|
||
|
HWND hLicenseEditWnd;
|
||
|
TCHAR strLicense[0x1000];
|
||
|
|
||
|
switch (message) {
|
||
|
case WM_INITDIALOG:
|
||
|
hLicenseEditWnd = GetDlgItem(hDlg, IDC_LICENSE_EDIT);
|
||
|
LoadString(hInst, IDS_LICENSE, strLicense, 0x1000);
|
||
|
SetWindowText(hLicenseEditWnd, strLicense);
|
||
|
return TRUE;
|
||
|
case WM_COMMAND:
|
||
|
if ((LOWORD(wParam) == IDOK) || (LOWORD(wParam) == IDCANCEL)) {
|
||
|
EndDialog(hDlg, LOWORD(wParam));
|
||
|
return TRUE;
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
void StartWorkerThread(HWND hWnd)
|
||
|
{
|
||
|
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, (DLGPROC)MoveDialogWndProc);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
void MonitorThreadProc(void *lpParameter)
|
||
|
{
|
||
|
// ULONG OldProcessorUsage = 0;
|
||
|
// ULONG OldProcessCount = 0;
|
||
|
HWND hWnd = (HWND)lpParameter;
|
||
|
|
||
|
// Create the event
|
||
|
hMonitorThreadEvent = CreateEvent(NULL, TRUE, TRUE, "Winfile Monitor Event");
|
||
|
|
||
|
// If we couldn't create the event then exit the thread
|
||
|
if (!hMonitorThreadEvent)
|
||
|
return;
|
||
|
|
||
|
while (1) {
|
||
|
DWORD dwWaitVal;
|
||
|
|
||
|
// Wait on the event
|
||
|
dwWaitVal = WaitForSingleObject(hMonitorThreadEvent, INFINITE);
|
||
|
|
||
|
// If the wait failed then the event object must have been
|
||
|
// closed and the task manager is exiting so exit this thread
|
||
|
if (dwWaitVal == WAIT_FAILED) {
|
||
|
// CloseHandle(hMonitorThreadEvent); // Should we close the event object handle or not ???
|
||
|
// hMonitorThreadEvent = NULL; // if we do then check what happens when main thread tries to delete it also....
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (dwWaitVal == WAIT_OBJECT_0) {
|
||
|
// Reset our event
|
||
|
ResetEvent(hMonitorThreadEvent);
|
||
|
#if 0
|
||
|
TCHAR text[260];
|
||
|
if ((ULONG)SendMessage(hProcessPageListCtrl, LVM_GETITEMCOUNT, 0, 0) != PerfDataGetProcessCount())
|
||
|
SendMessage(hProcessPageListCtrl, LVM_SETITEMCOUNT, PerfDataGetProcessCount(), /*LVSICF_NOINVALIDATEALL|*/LVSICF_NOSCROLL);
|
||
|
if (IsWindowVisible(hProcessPage))
|
||
|
InvalidateRect(hProcessPageListCtrl, NULL, FALSE);
|
||
|
if (OldProcessorUsage != PerfDataGetProcessorUsage()) {
|
||
|
OldProcessorUsage = PerfDataGetProcessorUsage();
|
||
|
wsprintf(text, _T("CPU Usage: %3d%%"), OldProcessorUsage);
|
||
|
SendMessage(hStatusWnd, SB_SETTEXT, 1, (LPARAM)text);
|
||
|
}
|
||
|
if (OldProcessCount != PerfDataGetProcessCount()) {
|
||
|
OldProcessCount = PerfDataGetProcessCount();
|
||
|
wsprintf(text, _T("Processes: %d"), OldProcessCount);
|
||
|
SendMessage(hStatusWnd, SB_SETTEXT, 0, (LPARAM)text);
|
||
|
}
|
||
|
#endif
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
BOOL CreateMonitorThread(HWND hWnd)
|
||
|
{
|
||
|
_beginthread(MonitorThreadProc, 0, hWnd);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
void SignalMonitorEvent(void)
|
||
|
{
|
||
|
SetEvent(hMonitorThreadEvent);
|
||
|
}
|
||
|
|
||
|
BOOL DestryMonitorThread(void)
|
||
|
{
|
||
|
CloseHandle(hMonitorThreadEvent);
|
||
|
hMonitorThreadEvent = NULL;
|
||
|
return TRUE;
|
||
|
}
|
||
|
|