Полное руководство. С# 4.0 - Шилдт Герберт
Вот к какому результату приводит выполнение этой программы (опять же все зависит от конкретных настроек языковых и региональных параметров локализации базового программного обеспечения).Время: 11:19 AMВремя 24-часовом формате: 11:19Дата: Thu Feb 11, 2010Эра: A.D.Время в секундах: 11:19:40 AMДень месяца в формате m: February 11Минуты в формате т: 19Форматирование промежутков времени
Начиная с версии 4.0, в среде .NET Framework появилась возможность форматировать объекты типа TimeSpan — структуры, представляющей промежуток времени.Объект типа TimeSpan может быть получен самыми разными способами, в том числеи в результате вычитания одного объекта типа DateTime из другого. И хотя форматировать объекты типа TimeSpan приходится нечасто, о такой возможности все же стоитупомянуть вкратце.
По умолчанию в структуре TimeSpan поддерживаются три стандартных спецификатора формата даты и времени: с, g и G. Они обозначают инвариантную формупромежутка времени, короткую и длинную форму с учетом культурной среды соответственно (последняя форма всегда включает в себя дни). Кроме того, в структуреTimeSpan поддерживаются специальные спецификаторы формата даты и времени,приведенные в табл. 22.9. Вообще говоря, если один из этих спецификаторов используется в отдельности, его нужно предварить символом %.
Таблица 22.9. Символы-заполнители специального формата промежутка времениСимвол-заполнительНазначениеd, dd, ddd, dddd, ddddd, dddddd, dddddddЦелые дни. Если указано несколько символов-заполнителей d, то отображается, по крайней мере, указанное количество цифр с начальными нулями, если требуетсяh, hhЧасы (не считая тех, что составляют часть целого дня). Если указано hh, то отображаются две цифры с начальными нулями, если требуетсяm, mmМинуты (не считая тех, что составляют часть целого часа). Если указано mm, то отображаются две цифры с начальными нулями, если требуетсяs, ssСекунды (не считая тех, что составляют часть целой минуты). Если указано ss, то отображаются две цифры с начальными нулями, если требуетсяf, ff, fff, ffff, fffff, ffffff, fffffffДробные доли секунды. Количество символов-заполнителей f обозначает точность представления, а остальные цифры отбрасываютсяF, FF, FFF, FFFF, FFFFF, FFFFFF, FFFFFFFДробные доли секунды. Количество символов-заполнителей F обозначает точность представления, а остальные цифры отбрасываются и конечные нули не отображаются
В приведенной ниже программе демонстрируется форматирование объектов типаTimeSpan на примере отображения времени, которое приблизительно требуется длявывода на экран 1000 целых значений в цикле for.// Отформатировать объект типа TimeSpan.using System;class TimeSpanDemo { static void Main() { DateTime start = DateTime.Now; // Вывести числа от 1 до 1000. for(int i = 1; i <= 1000; i++) { Console.Write(i + " "); if((i % 10) == 0) Console.WriteLine(); } Console.WriteLine(); DateTime end = DateTime.Now; TimeSpan span = end - start; Console.WriteLine("Время выполнения: {0:c}", span); Console.WriteLine("Время выполнения: {0:g}", span); Console.WriteLine("Время выполнения: {0:G}", span); Console.WriteLine("Время выполнения: 0.{0:fff} секунды", span); }}
Выполнение этой программы приводит к следующему результату, который и вэтом случае зависит от конкретных настроек языковых и региональных параметровлокализации базового программного обеспечения, а также от загрузки системы задачами и ее быстродействия.981 982 983 984 985 986 987 988 989 990991 992 993 994 995 996 997 998 999 1000Время выполнения: 00:00:00.0140000Время выполнения: 0:00:00.014Время выполнения: 0:00:00:00.0140000Время выполнения: 0.014 секундыФорматирование перечислений
В C# допускается также форматировать значения, определяемые в перечислении.Вообще говоря, значения из перечисления могут отображаться как по имени, так ипо значению. Спецификаторы формата перечислений сведены в табл. 22.10. Обратитеособое внимание на форматы G и F. Перед перечислениями, которые должны представлять битовые поля, следует указывать атрибут Flags. Как правило, в битовых полях хранятся значения, обозначающие отдельные двоичные разряды и упорядоченныепо степени числа 2. При наличии атрибута Flags имена всех битовых составляющихформатируемого значения, если, конечно, это действительное значение, отображаются с помощью спецификатора G. А с помощью спецификатора F отображаются именавсех битовых составляющих форматируемого значения, если оно составляется путемлогического сложения по ИЛИ двух иди более полей, определяемых в перечислении.
Таблица 22.10. Спецификаторы формата перечисленийСпецификаторНазначениеDОтображает значение в виде десятичного целого числаdТо же, что и DFОтображает имя значения. Если это значение можно создать путем логического сложения по ИЛИ двух или более полей, определенных в перечислении, то данный спецификатор отображает имена всех битовых составляющих заданного значения, причем независимо от того, задан атрибут Flags или нетfТо же, что и FGОтображает имя значения. Если перед форматируемым перечислением указывается атрибут Flags, то данный спецификатор отображает имена всех битовых составляющих заданного значения, если, конечно, это допустимое значениеgТо же, что и GXОтображает значение в виде шестнадцатеричного целого числа. Для отображения как минимум восьми цифр форматируемое значение дополняется (при необходимости) начальными нулямиXТо же, что и X
В приведенной ниже программе демонстрируется применение спецификаторовформата перечислений.// Отформатировать перечисление.using System;class EnumFmtDemo { enum Direction { North, South, East, West } [Flags] enum Status { Ready=0x1, OffLine=0x2, Waiting=0x4, TransmitOK=0x8, ReceiveOK=0x10, OnLine=0x20 } static void Main() { Direction d = Direction.West; Console.WriteLine("{0:G}", d); Console.WriteLine("{0:F}", d); Console.WriteLine("{0:D}", d); Console.WriteLine("{0:X}", d); Status s = Status.Ready | Status.TransmitOK; Console.WriteLine("{0:G}", s); Console.WriteLine("{0:F}", s); Console.WriteLine("{0:D}", s); Console.WriteLine("{0:X}", s); }}
Ниже приведен результат выполнения этой программы.WestWest300000003Ready, TransmitOKReady, TransmitOK900000009
ГЛАВА 23. Многопоточное программирование. Часть первая: основы
Среди многих замечательных свойств языка С# особоеместо принадлежит поддержке многопоточного программирования. Многопоточная программа состоитиз двух иди более частей, выполняемых параллельно. Каждая часть такой программы называется потоком и определяет отдельный путь выполнения команд. Таким образом,многопоточная обработка является особой формой многозадачности.Многопоточное программирование опирается на целый ряд средств, предусмотренных для этой цели в самомязыке С#, а также на классы, определенные в среде .NETFramework. Благодаря встроенной в C# поддержке многопоточной обработки сводятся к минимуму или вообщеустраняются многие трудности, связанные с организациеймногопоточной обработки в других языках программирования. Как станет ясно из дальнейшего, поддержка в C#многопоточной обработки четко организована и простадля понимания.С выпуском версии 4.0 в среде .NET Framework появились два важных дополнения, имеющих отношение к многопоточным приложениям. Первым из них является TPL(Task Parallel Library — Библиотека распараллеливания задач), а вторым — PLINQ (Parallel LINQ — Параллельныйязык интегрированных запросов). Оба дополнения поддерживают параллельное программирование и позволяют использовать преимущества, предоставляемые многопроцессорными (многоядерными) компьютерами в отношенииобработки данных. Кроме того, библиотека TPL упрощаетсоздание многопоточных приложений и управление ими.В силу этого многопоточная обработка, опирающаяся на23TPL, рекомендуется теперь как основной подход к разработке многопоточных приложений. Тем не менее накопленный опыт создания исходной многопоточной подсистемы по-прежнему имеет значение по целому ряду причин. Во-первых, уже существуетнемалый объем унаследованного кода, в котором применяется первоначальный подход к многопоточной обработке. Если приходится работать с таким кодом или сопровождать его, то нужно знать, как работает исходная многопоточная система. Во-вторых,в коде, опирающемся на TPL, могут по-прежнему использоваться элементы исходноймногопоточной системы, и особенно ее средства синхронизации. И в-третьих, несмотря на то что сама библиотека TPL основывается на абстракции, называемой задачей,она по-прежнему неявно опирается на потоки и потоковые средства, описываемыев этой главе. Поэтому для полного усвоения и применения TPL потребуются твердыезнания материала, излагаемого в этой главе.И наконец, следует особо подчеркнуть, что многопоточная обработка представляетсобой довольно обширную тему, и поэтому подробное ее изложение выходит за рамки этой книги. В этой и последующей главах представлен лишь беглый обзор даннойтемы и демонстрируется ряд основополагающих методик. Следовательно, материалэтих глав может служить введением в эту важную тему и основанием для дальнейшегоее самостоятельного изучения.Основы многопоточной обработки
Откройте для себя мир чтения на siteknig.com - месте, где каждая книга оживает прямо в браузере. Здесь вас уже ждёт произведение Полное руководство. С# 4.0 - Шилдт Герберт, относящееся к жанру Программирование. Никаких регистраций, никаких преград - только вы и история, доступная в полном формате. Наш литературный портал создан для тех, кто любит комфорт: хотите читать с телефона - пожалуйста; предпочитаете ноутбук - идеально! Все книги открываются моментально и представлены полностью, без сокращений и скрытых страниц. Каталог жанров поможет вам быстро найти что-то по настроению: увлекательный роман, динамичное фэнтези, глубокую классику или лёгкое чтение перед сном. Мы ежедневно расширяем библиотеку, добавляя новые произведения, чтобы вам всегда было что открыть "на потом". Сегодня на siteknig.com доступно более 200000 книг - и каждая готова стать вашей новой любимой. Просто выбирайте, открывайте и наслаждайтесь чтением там, где вам удобно.


