Pull to refresh
37
0
Send message
мне нужно подумать несколько миллионов лет
добился однострочника, запускаемого из командной строки (без bat-файла):

cmd /v:on/q/c for /l %j in (0,0,1)do if !random! LSS 16384 (<nul set/p=/)else (<nul set/p=\)
Меряемся, у кого короче )

@echo off & setlocal enabledelayedexpansion 
:a
set c=/\ &for /f %%i in ('set /a %random% %% 2') do echo|set /p=!c:~%%i,1!&goto a

разделяю ваши чувства, переживал по поводу этой картинки с тех пор, как увидел ее )
поэтому спешу поделиться радостью: все закончится хорошо, вот пруф:
image

источник habrahabr.ru/post/159713/#comment_5476039
Вообще же подобную идею можно проследить еще у Свифта:
Длинная цитата
Со всех сторон каждой дощечки приклеено было по кусочку бумаги, и на этих бумажках были написаны все слова их языка в различных наклонениях, временах и падежах, но без всякого порядка. Профессор попросил меня быть внимательнее, так как он собирался пустить в ход свою машину. По его команде каждый ученик взялся за железную рукоятку, которые в числе сорока были вставлены по краям рамы, и быстро повернул ее, после чего расположение слов совершенно изменилось. Тогда профессор приказал тридцати шести ученикам медленно читать образовавшиеся строки в том порядке, в каком они разместились в раме; если случалось, что три или четыре слова составляли часть фразы, ее диктовали остальным четырем ученикам, исполнявшим роль писцов. Это упражнение было повторено три или четыре раза, и машина была так устроена, что после каждого оборота слова принимали все новое расположение, по мере того как квадратики переворачивались с одной стороны на другую.

Ученики занимались этими упражнениями по шесть часов в день, и профессор показал мне множество фолиантов, составленных из подобных отрывочных фраз; он намеревался связать их вместе и от этого богатого материала дать миру полный компендий всех искусств и наук; его работа могла бы быть, однако, облегчена и значительно ускорена, если бы удалось собрать фонд для сооружения пятисот таких станков в Лагадо и обязать руководителей объединить полученные ими коллекции.

Свифт Д. Путешествия Гулливера. Путешествие в Лапуту, Бальнибарби, Лаггнегг, Глаббдобдриб и Японию
Перевод немножко подкачал:

Оригинал:
It's the challenge that's been staring us in the face for the past 30 years It has water, it has carbon
Перевод:
Это вызов, который глядит нам в глаза. За последние 30 лет мы выяснили — там есть вода, есть углерод
На самом деле:
Вызов глядит нам в глаза последние 30 лет. Там есть вода, углерод

Марс это место, которое мы можем достичь
Mars is a place we can settle
Марс это место, где мы можем обосноваться

глубиной 5000 километров.
5,000 kilometers long
длиной 5000 километров.

возможны загрязнения
Back-contamination
заражение внеземными микроорганизмами

Mars is a dry frozen version of our home сovered in red dust and sand
Марс — сухой, замороженный, покрытый красной пылью и песком — кандидат на наш дом
Марс — это сухая и замороженная версия нашего дома, покрытая красной пылью и песком

И у нас будут «глаза» и «уши» на поверхности
We now have «eyes» and «ears» on the surface
Теперь у нас есть «глаза» и «уши» на поверхности

What's left after you go is the good you've left behind
То, что осталось с вами после того, как вы пошли, лучше, чем то, что вы оставили позади
Когда вы уйдете, останется то хорошее, что вы сами оставили

А вообще, конечно, разделяю восхищение новыми перспективами человечества :) И невообразимо радует возвращение романтики в науку, той романтики, с которой начинаются великие открытия.
Потоки будут спать, пока не появится новая задача в очереди.
Задача появилась — поток проснулся — выполнил очередную задачу — если есть еще задачи, выполнил их — опять заснул.

Пользователь класса просто добавляет потоки в очередь и устанавливает событие, которое разбудит рабочий поток.
Хотя я к Связному не имею отношения, попробую написать, что вы сделали не так.

Задача действительно решена неверно, у вас нет никакого ThreadPool'а.
Самая главная ошибка: каждая задача у вас выполняется в новом потоке:
Thread lTaskThread =
new Thread(
() =>
{
// Выполнить задачу.
TaskBody();


Вместо этого необходимо при создании пула завести aConcurrentTaskNumber потоков, которые будут выполнять задачи. Поток sheduler'а в таком случае не нужен вообще, все постановки задач в очередь выполняются синхронно.

Если бы вы были знакомы с концепцией .NET ThreadPool (и вообще паттерном thread pool), проблемы бы не было.
>ведь макросов с переменным количеством аргументов не бывает.

добавлены в С с 99 года, в С++ с 2011
ru.wikipedia.org/wiki/Вариативный_макрос
>если картинка непонятна, то это другое дело.

картинка просто не соотвествует действительности

>Первоначально значение SyncBlock равно нулю. Однако в SyncBlock может хранится хеш-код объекта (при вызове метода GetHashCode), или номер записи syncblk,

вы путаете причину и следствие. не «SyncBlock может хранить хеш-код», а «Sync Index может использоваться в качестве хеш-кода»

>это не является ошибкой. см. мой коммент выше.

в той формулировке, как это сделано в статье, именно что ошибка. а вашим комментариям, к сожалению, доверять нельзя
почиайте Липперта что ли:
blogs.msdn.com/b/ericlippert/archive/2010/09/30/the-truth-about-value-types.aspx
blogs.msdn.com/b/ericlippert/archive/2009/04/27/the-stack-is-an-implementation-detail.aspx

>вообще-то посчитано правильно. m_firstChar является отдельным полем класса
>тогда при присваивании ей значения char копируется из массива символов.

возьмите отладчик и посмотрите побайтно, что в строке есть и чего там нет

а если в моем классе будет 10 строк, то по вашей логике должно быть 10 штук Reference type pointer на схеме?

ссылочные объекты занимают 4 байта (на машине соответствующей разрядности) и вполне попадают в Object fields. незачем пихать в схему лишнюю сущность
тот же Рихтер рисует только Type object ptr и Sync index: www.rvenables.com/linkjackandsufferaccidentaldroptable/clr_via_csharp_f4.9.png

>>Однако в SyncBlock может хранится хеш-код объекта (при вызове метода GetHashCode), или номер записи syncblk
«все смешалось в доме Облонских»
все совсем наоборот. для System.Object в CLR 1-2 в качестве хешкода использовался Sync index (поэтому вызов GetHashCode() на нем приводил к созданию Sync block'a)

подсчет длины строки также выполнен неверно. m_firstChar является первым элементом в последовательности символов, и поэтому присутствует один раз, а вы посчитали его дважды

на ошибку с привязкой value types к стеку вам уже указали
>Reference type pointer — ссылка на объект, хранящаяся в переменной, размещенной в стеке со смещением 4.

несколько раз перечитал, не понял, что это
и почему его нет в общей сумме?
как раз нет
антология — это «избранное», если угодно, очень часто «лучшее»
полное собрание никак не может быть антологией
полная антология — оксюморон
пропали теги, к сожалению

class C<T>{
static C() { Console.WriteLine(«from static ctor»); }
}
Похоже, других вариантов уже не будет, поэтому вот мое решение. Удивительно, что никто не предложил.
Поскольку типа С до «before static ctor» в домене просто нет, то и статический конструктор его не может вызваться.
Этот же способ (с дополнением одной строчки) покрывает более правильный случай, указанный habrahabr.ru/blogs/net/113543/#comment_3650548

using System;

class C{
static C() { Console.WriteLine(«from static ctor»); }
}

class App
{
static void Main()
{
Console.WriteLine(«before static ctor»);
var t = typeof(C<>).MakeGenericType(new Type[] { typeof(string) } );
object o = Activator.CreateInstance(t);
Console.WriteLine(«after static ctor»);
}
}
да, это решение конечно будет работать
еще поправочка,
public static object a = new A();

поскольку А приватно определен, наружу отдавать его нельзя

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Registered
Activity