Pull to refresh
8
0
Евгений @Genoik

User

Send message
А где тут «недополученная прибыль»?
Даже если спустя год проект станет коммерческим, то старые статьи и старые ссылки никоим образом не отберут прибыль у самого Хабра, а вот за новые статьи и продвижение своего коммерческого проекта уже можно предложить переход на платный аккаунт.
Ведь по сути дела ссылка — это удобство читателей, а не писателей, ведь в статьях упоминается название проекта, значит и его страница гуглится за 15 секунд. ИМХО.
Небольшой оффтоп-размышление…
Может кто-нибудь объяснит логику, почему нельзя бесплатно в своей статье размещать ссылку на свой же сайт с некоммерческим проектом?
Ведь по логике, перехожу я туда с Хабра(Гигтаймса, Мегамозга), значит администрация свою прибыль уже получила, так как минимум рекламу их я уже посмотрел.
Не хотят заниматься продвижением чужих проектов ?! Логично, но ведь и автор, написав свою стать, помимо продвижения своего проекта одновременно занимается продвижением Хабра как такового. То есть сам Хабр не тратит своих никаких ресурсов в том случае, если в статье автора будет ссылка на эго проект, так как даже при прямом переходе на страничку автора, без посещения Хабра, у администрации нет никакой упущенной прибыли.
Почему бы для тех статей, которые пишут обычные люди не дать возможность указывать ссылки на некоммерческие проекты без всяких тарифных планов, а уже для компаний, которые продвигают свои коммерческие проекты (читай реклама), оставить тарифные планы за денежку?
Тогда и волки сыты (Хабр получает прибыль как от рекламы, так и от коммерческих тарифных планов), и овцы целы (обычные пользователи генерируют контент, который способствует увеличению аудитории).
Я возможно буду не прав, но имел ввиду что подобный материал лучше подавать от простого к сложному, пусть даже часть материала будет присутствовать где-то на других ресурсах. Я лично не вижу в этом ничего плохого. И мне лично кажется, что хорошо, когда весь материал в одном месте и не надо прыгать по сторонним ссылкам и искать материал в Гугле.
Лично я довольно неплохо знаком с классическим кольцевым буфером, но возможно тем, для кого эта тема нова, будет интересно прочитать все в одном месте.
«Начинается все с производства самой печатной платы, которая покрывается микросхемой при помощи паяльной пасты.»
Если честно, не совсем понял эту фразу, какая именно микросхема имеется ввиду?
Как при помощи паяльной пасты получается микросхема?
Всегда думал что под микросхемой подразумевается интегральная схема, заключенная в корпус.
Можно как-то расшифровать эту фразу?
Добрый день!
Хорошая статья, но мне кажется для начала стоило бы показать реализацию 1D, а потом расширить ее на 2D случай, для тех, кто никогда не сталкивался с кольцевыми буферами. Мне кажется, во-первых так было бы проще для понимания для новичков, во-вторых, было бы видно, как правильно делается переход между 1D->2D, ну и далее по аналогии можно перейти 2D->3D.
Сам в основной своей деятельности использую 1D версию, с 2D приходилось работать только 1 раз.
Спасибо!
Пока изучаю возможности в частном порядке!
Если получиться продвинуть использование вашего ПО в компании, обязательно вам напишу на почту.
Скачал CppCat, создал новое консольное приложение в Visual Studio, добавил исходники проекта для Cortex4, попробовал скомпилировать проект в студии, выдало кучу ошибок (что ожидаемо), запустил проверку CppCat вручную, нашел несколько ошибок.

Вероятно такой способ вполне рабочий, единственный вопрос, который мучает, насколько полная происходит проверка файлов без компиляции самого проекта в Visual Studio. Точнее, влияет ли отсутствие или наличие файлов, которые создает сама студия во время компиляции.
Проект создан в среде IAR (или KEIL) для микроконтроллеров.
Соответственно в среде Visual Studio он компилироваться не будет, так как используются специфичные для данного семейства микроконтроллеров заголовочные файлы.
А вот просто добавить исходные файлы в Visual Studio, создав консольное приложение и проверить проект без компиляции было бы очень удобно.
Прошу прощения за оффтоп, такой вопрос возник по CppCat и PVS-studio, можно ли с их помощью проверить файлы проекта не компилируя сам проект и будет ли при этом разница при анализе исходных кодов?
Да, вы правы, не совсем верно выразился, обработка сигнала в рабочем потоке будет в случае такого использования:
run()
{
    ....

    Object a;
    ....

    connect(&timer, SIGNAL(timeout()), &a, SLOT(onTimeout()));
    ....
}
«А вообще для синглтонов я недавно открыл для себя отличную реализацию на атомарных типах»
А где можно почитать об этом?
Немного повторюсь:" данная реализация не претендует на абсолютно правильную, это скорее описание, одного из вариантов, как можно сделать."
Я считаю, что не ошибается только тот, кто ничего не делает.
Эта статья появилась, потому что было желание рассказать и показать, как можно сделать. Возможно в будущем она кому-то пригодится, может кто-то найдет в ней что-то полезное для себя, какие-то идеи или возможности в реализации своей задумке.
Она не ставит своей целью научить кого-то, как надо программировать. Но, я лично считаю, что чем больше подобных статей будет на русском языке, тем больше у разработчиков будет информации о той или иной технологии, тем легче им будет работать.
В конце концов, по мере обсуждения всплыли кое-какие подробности реализации, лично которых я не знал. Кто-то прочитает, взвесит для себя все за и против, и сделает выбор в сторону того или иного способа работы.
Если это будет действительно так, значит я не зря потратил свое время на написание данной статьи, а ваше время на ее прочтение.
Можно у вас попросить пример программы(а лучше статью) полного использования прелестей Qt в стиле Qt?
Я думаю мне, да и не только мне, будет полезно поучиться у вас, как надо использовать Qt.
Если придет больше (с чем сталкиваться еще не приходилось ни разу, но вдруг) ничего страшного. При разборе пакета этот нюанс учтен, вместе с пакетом передается его длина и контрольная сумма.
Вместо двойной буферизации можно использовать кольцевой буфер, тогда мы ничего не пропустим.
Добавлю еще, способ, приведенный выше не подходит по двум причинам, во-первых, нужно всегда знать длину пакета. Во-вторых, если устройство не отвечает на запрос, мы об этом не узнаем, будем крутиться в потоке, в ожидании пакета.
Отличные ссылки, спасибо! Как-то прошли мимо меня.
Если вы не против, добавлю их в статью.

Тот пример, который привели вы, немного отличается от того, что привел я, хотя бы потому, что в вашем примере ожидается, что слот будет обрабатываться в том же потоке, что и сигнал. А это не так. Это вводит в заблуждение.

В моем же примере вся работа по отправке и приему будет проходить в одном потоке, а вот обработка сигналов будет в другом потоке.
Если подытожить, то в двух словах можно сказать так, все, что вы поместите в метод run(), будет выполняться в этом потоке, во всех остальных случаях в основном потоке, за исключением случая, когда присоединение слотов и сигналов происходит в методе run().
Отвечу сам себе, вы абсолютно правы, в том контексте, который привели вы, блокировка не нужна. Не сразу понял о какой части кода идет речь. Прошу прощения и посыпаю голову пеплом.
Ну что ж, предлагаю обратиться к документации.
Пример:
void MasterThread::transaction(const QString &portName, int waitTimeout, const QString &request)
{
    QMutexLocker locker(&mutex);
    this->portName = portName;
    this->waitTimeout = waitTimeout;
    this->request = request;
   ....
}

Метод transaction вызывается из основного потока.
Пояснение:
«Note, the transaction() method is called in the main thread, but the request is provided in the MasterThread thread. The MasterThread data members are read and written concurrently in different threads, thus the QMutex class is used to synchronize the access.»

И далее:
«The transaction() method stores the serial port name, timeout and request data. The mutex can be locked with QMutexLocker to protect this data. The thread can be started then, unless it is already running.»

Возможно я чего-то не так понял?
Как вариант можно и так использовать.
Надо будет протестировать на реальном железе.
Для уверенности, что в процессе инициализации значения переменных не будут изменены извне. Возможно это лишнее, такие действия основываются на тех примерах, которые идут с Qt.
При открытии COM-порта это будет лишнее, ИМХО.
Инициализацию ресурсов мне кажется не очень правильно делать в одном потоке, а использование в другом, кто даст гарантию в таком случае, что на середине передачи значения, в массиве, который передается, не изменятся из другого потока?!
Не получится ли так, что мне нужно передать последовательность байт (0x20, 0x45, 0x12, 0x17), но в момент передачи значение третьего байта внешний поток поменяет на 0x14, и у меня в COM-порт уйдет (0x20, 0x45, 0x14, 0x17)?

Information

Rating
Does not participate
Location
Киров (Кировская обл.), Кировская обл., Россия
Registered
Activity