Вход

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

Рекомендуемая категория для самостоятельной подготовки:
Курсовая работа*
Код 347608
Дата создания 06 июля 2013
Страниц 16
Мы сможем обработать ваш заказ (!) 25 ноября в 12:00 [мск]
Файлы будут доступны для скачивания только после обработки заказа.
1 310руб.
КУПИТЬ

Содержание

СОДЕРЖАНИЕ
Введение………………………………………………………………………...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

Введение

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

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

// Implementation
protected:
HICON m_hIcon;

// Generated message map functions
//{{AFX_MSG(CMultithreadDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnOpenFIle();
afx_msg void OnSelectDirectory();
afx_msg void OnCopyFile();
afx_msg void OnCancelProcess();
afx_msg void OnClearlist();
afx_msg void OnClearResult();
afx_msg void OnProcesslist();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
//ON_MESSAGE(WM_USER_THREAD_FINISHED, OnThreadFinished);
//ON_MESSAGE(WM_USER_THREAD_UPDATE_PROGRESS, OnThreadUpdateProgress);
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif// !defined(AFX_MULTITHREADDLG_H__87D05154_6618_499E_99A8_BE1FCF540C7B__INCLUDED_)
// CProcess.cpp : implementation file
//
#include "stdafx.h"
#include "Multithread.h"
#include "CProcess.h"
#include <tlhelp32.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCProcess dialog
extern BOOL stream=FALSE,process=FALSE;
CCProcess::CCProcess(CWnd* pParent /*=NULL*/)
: CDialog(CCProcess::IDD, pParent)
{
//{{AFX_DATA_INIT(CCProcess)
//}}AFX_DATA_INIT
}
BOOL CCProcess::OnInitDialog() {
CDialog::OnInitDialog();
BOOL BL=TRUE;
CDialog::OnInitDialog();
//CDialog::OnPaint();
CListCtrl * listctrl = (CListCtrl*)GetDlgItem(IDC_LIST2);

RECT rect;
listctrl->DeleteAllItems();
listctrl->GetClientRect(&rect);


int width ;
//if((process==TRUE ))//||(process==FALSE &&stream==FALSE))

{
width= rect.right/8;
listctrl->InsertColumn(0," Exe File ",LVCFMT_LEFT,width); //FILE
listctrl->InsertColumn(1,_T("Process ID"),LVCFMT_LEFT,width);//Identifier of the process
listctrl->InsertColumn(2,_T("DefaultHeap ID "),LVCFMT_LEFT,width);//Identifier of the default heap for the process
listctrl->InsertColumn(3,"Usage count",LVCFMT_LEFT,width);//Number of references to the process
listctrl->InsertColumn(4,"Module ID ",LVCFMT_LEFT,width);//Module identifier of the process
listctrl->InsertColumn(5,"Threads Count",LVCFMT_LEFT,width);//Number of execution threads started by the process.
listctrl->InsertColumn(6,"ParentProcess ID ",LVCFMT_LEFT,width);//Identifier of the process that created the process being examined.
listctrl->InsertColumn(7,"PriClassBase ",LVCFMT_LEFT,width);//Base priority of any threads created by this process

}

//if(BL==TRUE)

listctrl->SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
listctrl->SetTextBkColor(RGB(186,221,212));
listctrl->SetBkColor(RGB(186,221,212));

OnCreateToolhelp32Snapshot();
process=FALSE;
BL=FALSE;
// TODO: Add extra initialization here

return TRUE;
}
//Вывод список всех процессссов
void CCProcess::OnCreateToolhelp32Snapshot()
{
// TODO: Add your control notification handler code here
char str2[90];
HANDLE hProcessSnap = NULL;
BOOL bRet = FALSE;
PROCESSENTRY32 pe32 = {0};
int i=0;
// Take a snapshot of all processes in the system.
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()

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

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