2002-07-20 16:24:45 +00:00
|
|
|
/*
|
|
|
|
* 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.
|
|
|
|
*/
|
2005-05-07 21:24:31 +00:00
|
|
|
|
2002-07-20 16:24:45 +00:00
|
|
|
#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>
|
2005-05-07 21:24:31 +00:00
|
|
|
|
2002-07-20 16:24:45 +00:00
|
|
|
#include <windowsx.h>
|
|
|
|
#include <process.h>
|
|
|
|
#include <assert.h>
|
|
|
|
#define ASSERT assert
|
|
|
|
|
|
|
|
#include "main.h"
|
|
|
|
#include "worker.h"
|
2002-07-22 21:12:26 +00:00
|
|
|
#include "drivebar.h"
|
2002-07-20 16:24:45 +00:00
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// 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
|
2002-08-04 18:40:49 +00:00
|
|
|
hMonitorThreadEvent = CreateEvent(NULL, TRUE, TRUE, _T("Winfile Monitor Event"));
|
2002-07-20 16:24:45 +00:00
|
|
|
|
|
|
|
// 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);
|
2002-07-22 21:12:26 +00:00
|
|
|
|
|
|
|
|
|
|
|
ConfigureDriveBar(Globals.hDriveBar);
|
|
|
|
|
2002-07-20 16:24:45 +00:00
|
|
|
#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;
|
|
|
|
}
|
|
|
|
|