Книга: Системное программирование в среде Windows
Вывод списка фоновых задач
Вывод списка фоновых задач
Программа 6.5 реализует функцию управления задачами DisplayJobs.
Программа 6.5. JobMgt: отображение списка активных задач
BOOL DisplayJobs(void)
/* Просмотреть файл базы данных, сообщить статус задачи. */
{
HANDLE hJobData, hProcess;
JM_JOB JobRecord;
DWORD JobNumber = 0, nXfer, ExitCode, FsLow, FsHigh;
TCHAR JobMgtFileName[MAX_PATH];
OVERLAPPED RegionStart;
GetJobMgtFileName(JobMgtFileName);
hJobData = CreateFile(JobMgtFileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
RegionStart.Offset = 0;
RegionStart.OffsetHigh = 0;
RegionStart.hEvent = (HANDLE)0;
FsLow = GetFileSize(hJobData, &FsHigh);
LockFileEx(hJobData, LOCKFILE_EXCLUSIVE_LOCK, 0, FsLow, FsHigh, &RegionStart);
__try {
while(ReadFile(hJobData, &JobRecord, SJM_JOB, &nXfer, NULL) && (nXfer > 0)) {
JobNumber++;
if (JobRecord.ProcessId == 0) continue;
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, JobRecord.ProcessId);
if (hProcess != NULL) GetExitCodeProcess(hProcess, &ExitCode);
_tprintf(_T(" [%d] "), JobNumber);
if (hProcess == NULL) _tprintf(_T(" Готово"));
else if (ExitCode != STILL_ACTIVE) _tprintf(_T("+ Готово"));
else _tprintf(_T(" "));
_tprintf(_T(" %sn"), JobRecord.CommandLine);
/* Удалить процессы, которые в системе уже не присутствуют. */
if (hProcess == NULL) {
/* Зарезервировать одну запись. */
SetFilePointer(hJobData, –(LONG)nXfer, NULL, FILE_CURRENT);
JobRecord.ProcessId = 0;
WriteFile(hJobData, &JobRecord, SJM_JOB, &nXfer, NULL);
}
} /* Конец цикла while. */
} /* Конец __try-блока. */
__finally {
UnlockFileEx(hJobData, 0, FsLow, FsHigh, &RegionStart);
CloseHandle(hJobData);
}
return TRUE;
}
- Создание фоновых задач
- 7.16. Активизация фоновых методов
- Включение и отключение синхронного вывода
- 1.1. Информатика. Предмет информатики. Основные задачи информатики
- Повторяющиеся задачи
- Постановка задачи
- 24.1. Расширение возможностей Панели задач
- 2.5.3. Настройки панели задач и меню Пуск
- 2. Правила вывода Армстронга
- 3. Производные правила вывода
- 1.6 Драйверы и буферы ввода-вывода
- 1.8 Ввод-вывод типичного приложения хранения данных