Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции-ТРПС.doc
Скачиваний:
13
Добавлен:
15.11.2018
Размер:
810.5 Кб
Скачать

13.4. Функция рабочего потока

DWORD WINAPI ThreadFunc (LPVOID pData) // Функция рабочего потока. { THREADPARAM& parm = *(THREADPARAM*)pData; // Истинная проверка выполняется // функцией CheckFiles() CheckFiles(parm, parm.szRoot); parm.idThread = 0; SwitchButton(parm.hWnd, TEXT('B')); return 0; }

void CheckFiles (THREADPARAM& parm, LPCTSTR szRoot) // Проверка файлов. Используется в потоке. { WIN32_FIND_DATA df; SYSTEMTIME sysTime; TCHAR tt[MAX_PATH];

lstrcpy(tt, szRoot); lstrcat(tt, TEXT("*.*")); HANDLE hd = ::FindFirstFile(tt, &df); if (hd == INVALID_HANDLE_VALUE) { ViewError(parm.hWnd); return; }

BOOL rb = TRUE; while (rb) { // Проверяем сигнал на остановку потока. if (!parm.hWnd) break;

if (lstrcmp(df.cFileName, TEXT(".")) && lstrcmp(df.cFileName, TEXT(".."))) { lstrcpy(tt, szRoot); lstrcat(tt, df.cFileName);

if (df.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { // Директория. // Делаем рекурсивный вызов этой же функции. if (tt[lstrlen(tt)-1] != TEXT('\\')) lstrcat(tt, TEXT("\\")); CheckFiles(parm, tt); }

else { // Файл. // Добавляем новую строку в ListView. NEW_FILE_DATA arData; lstrcpy(arData.szCheck, TEXT("?")); lstrcpy (arData.szName, tt); wsprintf(arData.szLen, TEXT("%d"), df.nFileSizeLow); ::FileTimeToSystemTime(&df.ftLastWriteTime, &sysTime); wsprintf(arData.szDate, TEXT("%02d.%02d.%d"), sysTime.wDay, sysTime.wMonth, sysTime.wYear);

WPARAM nItem = InsertListRow(parm.hwndList, &arData);

lstrcpy(arData.szCheck, TEXT("ERR")); HANDLE hFile = ::CreateFile(tt, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_NO_BUFFERING, NULL);

if (hFile != INVALID_HANDLE_VALUE) { // Читаем файл. BYTE buff[8*512]; DWORD nReaded = 0, len = 0, step = 19; do { if (!::ReadFile(hFile, buff, sizeof(buff), &nReaded, NULL)) { lstrcpy(arData.szCheck, TEXT("ERR")); nReaded = (DWORD)(-1); break; } // Снова проверяем сигнал // на остановку потока. if (!parm.hWnd) { rb = 0; break; }

// Если длина файла больше 40000 байт, // показываем процент выполнения // в колонке статуса. len += nReaded;

if (parm.hWnd && df.nFileSizeLow > 40000 && 100*len/df.nFileSizeLow > step) { wsprintf((LPTSTR)buff, TEXT("%d %c"), 100*len/df.nFileSizeLow, TEXT('%')); step += 20; UpdateCheckRow(parm.hwndList, nItem, (LPTSTR)buff); }

} while (nReaded);

if (!nReaded) lstrcpy(arData.szCheck, TEXT("ok"));

::CloseHandle(hFile); } // Показываем окончательный // результат проверки. if (parm.hWnd) UpdateCheckRow(parm.hwndList, nItem, arData.szCheck); } }

if (rb) rb = ::FindNextFile(hd, &df);

}

::FindClose(hd); }

Литература к первой части

1. Гоулд И.Г., Тутилл Дж.С. Терминологическая работа IFIP (Между­народная федерация по обработке информации) и ICC (Международный вычислительный центр) // Журн. вычисл. матем. и матем. физ., 1965, №2. - С. 377-386.

2. Майерс Г. Надежность программного обеспечения. - М.: Мир, 1980.

3. Турский В. Методология программирования. - М.: Мир, 1981.

4. Дейкстра Э. Дисциплина программирования. - М.: Мир, 1978.

5. Жоголев Е.А. Система программирования с использованием библиотеки подпрограмм / Система автоматизация программирования. - М.: Физматгиз, 1961. - С. 15-52.

6. Кауфман В.Ш. Языки программирования. Концепции и принципы. - М.: Радио и связь, 1993.

7. Требования и спецификации в разработке программ. - М.: Мир, 1984.

8. Буч Г. Объектно-ориентированное проектирование с примерами применения. - М.: Конкорд, 1992.

9. Sommerville I. Software Engineering. - Addison-Wesley Publishing Compa­ny, 1992.

10. Зиглер К. Методы проектирования программных систем. - М.: Мир, 1985.

11. Жоголев Е.А. Введение в технологию программирования. - М.: “ДИАЛОГ-МГУ”, 1994.

12. Липаев В.В. Качество программного обеспечения. - М.: Финансы и статистика, 1983.