Текст программы для Windows (WinAPI)
Для того чтобы было удобнее сравнивать эту и следующую программы, а также из-за того, что настоящая задача не требует для своего решения оконного интерфейса, в нижеприведенном тексте использованы только те вызовы API, которые не затрагивают графический интерфейс. Конечно, нынче редко какое приложение не использует возможностей GUI, но в нашем случае зато сразу можно увидеть разницу в организации параллельной работы запускаемых вычислений.
finclude <windows.h> #include <stdio.h> finclude <stdlib.h>
// Название: processFile
// Описание: исполняемый код треда
// Входные параметры: IpFileName - имя файла для обработки
// Выходные параметры: нет
//
DWORD processFile(LPVOID IpFileName) {
HANDLE handle: // описатель файла
DWORD numRead, total - 0:
char buf;
// запрос к ОС на открытие файла (только для чтения) handle - CreateFile((LPCTSTR)IpFileName. GENERIC_READ.
FILE_SHARE_READ. NULL. OPENJXISTING. FILE_ATTRIBUTE_NORMAL.
NULL);
// цикл чтения до конца файла do (
// чтение одного символа из файла
ReadFilet handle. (LPVOID) &buf. 1. SnumRead, NULL):
if (buf — 0x20) total++: } while (numRead > 0);
fprintft stderr. "(ThreadID: j;lu). File %s, spaces = Ы\п". GetCurrentThreadldO. IpFileName. total):
// закрытие файла CloseHandlet handle):
return(O): }
// Название: main
// Описание: главная программа
// Входные параметры: список имен файлов для обработки
// Выходные параметры: нет
//
int maindnt argc. char *argv[]) {
int i:
DWORD pid:
HANDLE hThrd[255]: // массив ссылок на треды
// для всех файлов, перечисленных в командной строке for (i - 0; К (argc-1); i++) {
// запуск треда - обработка одного файла hThrd[i] =• CreateThreadf NULL. 0x4000. (LPTHREAD_START_ROUTINE) processFile,
(LPVOID) argv[i+l]. 0. &pid):
fprintft stdout. "processFile started (HND=M)\n". hThrd[i]); }
// ожидание окончания выполнения всех запущенных тредов
WaitForMultipleObjectst argc-1. hThrd. true. INFINITE):
return(O): }
Обратите внимание, что основная программа запускает треды и ждет окончания их выполнения.
Дата добавления: 2015-01-18 | Просмотры: 473 | Нарушение авторских прав
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
|