Вход

Разработать многопоточное приложение для копирования и сравнения больших по размеру файлов с возможность приостановки процессов, вывода информации о текущем состоянии процессов (аналог Task Manager Windows).

Рекомендуемая категория для самостоятельной подготовки:
Курсовая работа*
Код 127333
Дата создания 2009
Страниц 16
Мы сможем обработать ваш заказ (!) 16 апреля в 16:00 [мск]
Файлы будут доступны для скачивания только после обработки заказа.
2 000руб.
КУПИТЬ

Содержание

СОДЕРЖАНИЕ
Введение………………………………………………………………………...4
1. Анализ поставленной задачи.………………….………..…………………..5
2. Метод решения………………………………………………………………7
3. Описание программы.…………….................................................................8
3.1 CChooseDirDlg ….………………………………………………….......8
3.2 CCProcess ……………………………………………………………….8
3.3 CDirectoryTree …………………………………………………………..8
3.4 CDriveCombo …………………………………………………………....9
3.5 CMultithreadDlg………………………………………………………...10
4. Руководство пользователя…………………………………………………12
4.1 – Системные требования……………………………………………...12
4.2 – Инструкция по инсталляции и эксплуатации программы……….12
5. Результаты разработки……………………………………………………..14
Заключение….....................................................................................................15
Приложение……………………………………………………………………16

Фрагмент работы для ознакомления

hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
AfxMessageBox("Error for takes all processes");

// Fill in the size of the structure before using it.
process=TRUE; stream=FALSE;
pe32.dwSize = sizeof(PROCESSENTRY32);

// Walk the snapshot of the processes, and for each process,
// display information.
CListCtrl * listctrl = (CListCtrl*)GetDlgItem(IDC_LIST2);
//m_listctrl.DeleteAllItems();
//m_listctrl.GetClientRect(&rect);

if (Process32First(hProcessSnap, &pe32))
{
do
{
if(pr_Id != pe32.th32ProcessID)
{
sprintf(str2,"%s",pe32.szExeFile);
listctrl->InsertItem(i,str2);
sprintf(str2,"%u",pe32.th32ProcessID);
listctrl->SetItemText(i,1,str2);
sprintf(str2,"%u",pe32.th32DefaultHeapID);
listctrl->SetItemText(i,2,str2);
sprintf(str2,"%u",pe32.cntUsage);
listctrl->SetItemText(i,3,str2);
sprintf(str2,"%u",pe32.th32ModuleID);
listctrl->SetItemText(i,4,str2);
sprintf(str2,"%u",pe32.cntThreads);
listctrl->SetItemText(i,5,str2);
sprintf(str2,"%u",pe32.th32ParentProcessID);
listctrl->SetItemText(i,6,str2);
sprintf(str2,"%u",pe32.pcPriClassBase);
listctrl->SetItemText(i,7,str2);

i++;
}
}
while (Process32Next(hProcessSnap, &pe32));
bRet = TRUE;
}
else
bRet = FALSE; // could not walk the list of processes

// Do not forget to clean up the snapshot object.
CloseHandle (hProcessSnap);
}
//реализация функций обмена данных с диалоговым окном
void CCProcess::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCProcess)
DDX_Control(pDX, IDC_LIST2, m_listctrl);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCProcess, CDialog)
//{{AFX_MSG_MAP(CCProcess)
ON_BN_CLICKED(IDC_Thread, OnKillProcess)
ON_BN_CLICKED(IDEXIT, OnRefresh)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// Завершить процесс.
void CCProcess::OnKillProcess()
{
CListCtrl * listctrl = (CListCtrl*)GetDlgItem(IDC_LIST2);
int iItem= listctrl->GetNextItem(-1,LVNI_SELECTED);
int item_count=0;
pr_Id = -1;
while(iItem!=-1)
{
item_count++;
iItem = listctrl->GetNextItem(iItem,LVNI_SELECTED);
}

if(item_count!=0)
{
for(int i=0;i<listctrl->GetItemCount();i++)
{
if(listctrl->GetItemState(i,LVIS_SELECTED)&LVIS_SELECTED)
{
int Response =
MessageBox("Вы уверены что хотите завершить этот процесс"
"",
"Предупреждение",
MB_OKCANCEL|MB_ICONASTERISK);
if( Response == IDOK )
{
char strLong[90];
sprintf(strLong,"%s",listctrl->GetItemText(i,1));
long lVar = 0;
lVar = strtol(strLong,NULL,10);
HANDLE hHandle;
DWORD dwExitCode = 0;
hHandle = ::OpenProcess(PROCESS_ALL_ACCESS,0,lVar);
::GetExitCodeProcess(hHandle,&dwExitCode);
::TerminateProcess(hHandle,dwExitCode);
pr_Id = lVar;

break;
}
}

}

}
else
AfxMessageBox("Вы не выбрали процесс из списка.");
listctrl->DeleteAllItems();
OnCreateToolhelp32Snapshot();
UpdateData(TRUE);
}
void CCProcess::OnRefresh()
{
CListCtrl * listctrl = (CListCtrl*)GetDlgItem(IDC_LIST2);
listctrl->DeleteAllItems();
OnCreateToolhelp32Snapshot();
UpdateData(TRUE);
}
#include "stdafx.h"
#include "DriveCombo.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// Definitions
#define MAX_BUFFER 1024 // Maximum buffer size
/////////////////////////////////////////////////////////////////////////////
// CDriveCombo
CDriveCombo::CDriveCombo()
{
}
CDriveCombo::~CDriveCombo()
{
}
BEGIN_MESSAGE_MAP(CDriveCombo, CComboBox)
//{{AFX_MSG_MAP(CDriveCombo)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDriveCombo message handlers
/****************************************************************************
Функция: Initialize()
цель: Читает диски в Операционной системе и заполняется сам по себе ими.
Ввод: None
Вывод: BOOL -- Была ли операция успешна или нет.
****************************************************************************/
BOOL CDriveCombo::Initialize()
{
BOOL bFound = FALSE; // Whether volume info was found or not
DWORD dwRes = 0; // Receives the drive bitmask
int i = 0; // Misc. counter variable
CString str; // Used for string manipulations

char szVolInfo[MAX_BUFFER];
char szDrives[26] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
// Get the bitmask of available drives
dwRes = GetLogicalDrives();
if (0 == dwRes)
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf, 0, NULL);
MessageBox((LPTSTR)lpMsgBuf, "GetLastError - GetLogicalDrives failed", MB_OK|MB_ICONERROR);
LocalFree(lpMsgBuf);
return FALSE;
}
// Separate out each drive letter and add it to the Combo Box
while (dwRes)
{
if (dwRes & 1)
{
// There's a drive for this bit position.
str.Format("%c: ", szDrives[i]);
// Get the name of the drive, if it exists
SetErrorMode(SEM_FAILCRITICALERRORS);
bFound = GetVolumeInformation(str, szVolInfo, MAX_BUFFER, NULL, NULL, NULL, NULL, NULL);
if (bFound)
str += szVolInfo;
// Add the drive information to the combo box
AddString(str);
}
dwRes >>= 1;
i++;
}
// Get the current directory, so we know what to highlight.
dwRes = GetCurrentDirectory(MAX_BUFFER, szVolInfo);
if (0 == dwRes)
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf, 0, NULL);
MessageBox((LPTSTR)lpMsgBuf, "GetLastError - GetCurrentDirectory failed", MB_OK|MB_ICONERROR);
LocalFree(lpMsgBuf);
return FALSE;
}
str.Format("%c", szVolInfo[0]);
i = FindString(-1, str);
SetCurSel(i);
return TRUE;
}
/****************************************************************************
Функция: IsDriveReady()
цель: Тестирует если указанный диск готов.
Ввод: int nIndex -- Диск для теста
Вывод: BOOL -- Была ли операция успешна или нет.
****************************************************************************/
BOOL CDriveCombo::IsDriveReady(int nIndex)
{
HANDLE hFile; // Handle to found file
WIN32_FIND_DATA stFindData; // Info about the found file
CString szDrive; // Drive letter to test
CString szSearch; // Search string
CString szError; // Error message
GetLBText(nIndex, szDrive);
szSearch = szDrive.Left(1);
szSearch += ":\\*.*";
// First, see if there's anything in the directory
hFile = FindFirstFile((LPCTSTR)szSearch, &stFindData);
if (INVALID_HANDLE_VALUE == hFile)
{
szError.Format("Drive %s: is not ready.", szDrive.Left(1));
MessageBox(szError, "Error", MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}
FindClose(hFile);
return TRUE;
}
/****************************************************************************
Функция: ResetDrive()
цель: Перезагружает текущий выбор к определенному букву диска.
Ввод: char cDrive -- буква диска.
Вывод: Ни один
****************************************************************************/
void CDriveCombo::ResetDrive(char cDrive)
{
CString szStr;
int nIndex = 0;
szStr.Format("%c:", cDrive);
nIndex = FindString(-1, szStr);
if (CB_ERR != nIndex)
SetCurSel(nIndex);
return;
}
21
21

Список литературы

списка литературы нет
Очень похожие работы
Пожалуйста, внимательно изучайте содержание и фрагменты работы. Деньги за приобретённые готовые работы по причине несоответствия данной работы вашим требованиям или её уникальности не возвращаются.
* Категория работы носит оценочный характер в соответствии с качественными и количественными параметрами предоставляемого материала. Данный материал ни целиком, ни любая из его частей не является готовым научным трудом, выпускной квалификационной работой, научным докладом или иной работой, предусмотренной государственной системой научной аттестации или необходимой для прохождения промежуточной или итоговой аттестации. Данный материал представляет собой субъективный результат обработки, структурирования и форматирования собранной его автором информации и предназначен, прежде всего, для использования в качестве источника для самостоятельной подготовки работы указанной тематики.
bmt: 0.00488
© Рефератбанк, 2002 - 2024