АкушерствоАнатомияАнестезиологияВакцинопрофилактикаВалеологияВетеринарияГигиенаЗаболеванияИммунологияКардиологияНеврологияНефрологияОнкологияОториноларингологияОфтальмологияПаразитологияПедиатрияПервая помощьПсихиатрияПульмонологияРеанимацияРевматологияСтоматологияТерапияТоксикологияТравматологияУрологияФармакологияФармацевтикаФизиотерапияФтизиатрияХирургияЭндокринологияЭпидемиология

Текст программы для Windows (WinAPI)

Прочитайте:
  1. Автоматизированное рабочее место врача: программное обеспечение. Специализированные медицинские прикладные программы
  2. Актуальный пример разработки программы в случае моббинга
  3. Антистрессовые программы
  4. Б. Текстовой отчет
  5. ВЗЯТИЕ КАЛА ДЛЯ КОПРОГРАММЫ.
  6. ГИБКОСТЬ КОНТЕКСТА
  7. Глава 7. ПРОГРАММЫ ОБЯЗАТЕЛЬНОГО МЕДИЦИНСКОГО СТРАХОВАНИЯ
  8. Главное меню Windows XP
  9. Диагностическая и лечебная программы
  10. ИНСУЛИН, САХАРНЫЙ ДИАБЕТ и ПРОГРАММЫ СветЛ.

Для того чтобы было удобнее сравнивать эту и следующую программы, а также из-за того, что настоящая задача не требует для своего решения оконного интер­фейса, в нижеприведенном тексте использованы только те вызовы 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 | Просмотры: 477 | Нарушение авторских прав



1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |



При использовании материала ссылка на сайт medlec.org обязательна! (0.003 сек.)