- 1
- 2
- 3
- 4
- 5
- 6
- 7
HRESULT SomeClass::GetVersion(std::wstring& version)
{
CComBSTR versionBstr;
m_Interface->get_Version(&versionBstr);
version = std::move(std::wstring((_bstr_t)versionBstr, versionBstr.Length()));
return S_OK;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+1
HRESULT SomeClass::GetVersion(std::wstring& version)
{
CComBSTR versionBstr;
m_Interface->get_Version(&versionBstr);
version = std::move(std::wstring((_bstr_t)versionBstr, versionBstr.Length()));
return S_OK;
}
Как показать в одном методе (не)знание move семантики, правил приведения типов и COM фреймворка
Такого не знать.
Чем Component Object Model не фреймворк?
Как классы в реестре регистрируются? Как сервера создаются отдельно стоящие или внутри процесса? Как через IDL клиенты создаются?
по этому я за линух и форки.
Взял "пхп" файл, положил в папку, которую "апач" видит и всё готово.
Поэтому я за "пхп".
COM был не плохой задумкой: кросс-языковой (а в случае IDispatchable даже с доступом из скриптовых языков), с версии DCOM еще и с доступом по сети.. Без кома винда бы может и не выстрелила.
Кстати, ActiveX это тоже COM.
Но говна в нем очень много, тут не поспоришь.
В линухе тоже есть свой COM: называется D-Bus. Он еще пока не так распостранен, но Поттеринг не зря хлеб кушает. Скоро виндуос будет казаться простым и понятным на фоне очередного линукса:)
А что ты имеешь ввиду под форками? Системный вызов fork? Он нравится тебе больше, чем pthreads?
Ну да, процессы понятнее и безопаснее этих ваших "тредов".
Тем более что в линуксе под капотом все равно это одно и тоже, разве что TLB разный. Вот на винде другое дело, там поток реально тяжелее процесса
Разве? Процесс (в виндах) — это же просто обёртка над группой потоков, как он может быть легче?
Между процессами же шарятся только те данные, которые ты реально хочешь расшарить.
Но победили унылые и менее гибкие треды.
И возможно что там есть серьезная разница по перформансу, как и в винде. Нет?
зы: а есть еще всякие fiber: юзерспейсные треды с кооперативкой.
Понаплодили блядь сущностей, зла не хватает.
В 90е все форкались и ничо
Solaris это такой проприетарный Unix который делал Sun с начала 80х. Сначала на основе BSD (и назывался SunOS), затем на основе System V.
Это было за долго до JVM, хотя конечно JVM был реализован на Solaris сначала.
Изначально она была только под SPARC (сановые процы) но в нулевых ее портировали на x86.
У нее много крутых штук: зоны для изоляции процессов, файловая система zfs скрещенная с диспетчером томов и поддержкой снепшотов (никто так больше не умеет!).
На Java она похожа разве что кучей XMLя (там на нем половина конфигов), пафосной виртуальностью (как в J2EE) и довольно выскими требованиями к памяти
Но ведь это не из-за того, что в венде треды хорошие. Там просто процессы очень медленно стартуют. Форк, конечно, очень странная идея, но позволяет запускать процессы уже прогретыми.
А тред, по сути, тот же форк, только вся память в режиме shared.
Пользователь хочет видеть процессы в списке задач. А потоки не хочет.
Я знаю что вот у меня есть инстанс MSSQL, вот его PID, и могу его грохнуть. Зачем мне знать что там внутри 1902 потока и их TIDы?
>>А тред, по сути, тот же форк, только вся память в режиме shared.
ну, на линуксе же это и есть просто clone с ключиком о том как шарить память
> хочет видеть процессы
А видит там вкладки хрома.
В EPROCESS (структура которая в executve, не путать с KPROCESS которая в ядре!) есть поле ``InheritedFromUniqueProcessId``.
Но оно опцЫонально. Даже в ProceXP видно что не все процессы имеют папу. Например потому, что папа умер (а удочерять как в юниксах там не принято).
Так что я вообще не знаю зачем там это поле, кроме как разве что дерево показывать.
Вот в unix -- там всегда папка есть. Не совсем понятно правда как ты собираешься это использовать.
Показывать всех, кто прямой потомок init или кто прямой потомок session leaderа (шела на терминале)?
В процесс группах и вовсе может быть куча процессов, и они явно не дети груп лидера (например ``fuck | petuh | sosat`` это одна группа же).
>>А видит там вкладки хрома.
лол)) зачет
>> кто форкнулся без экзека.
Вот это дело! А как это узнать?
Х.з., добавить exec'нутым какой-нибудь флажок?
Я вот с процессами основную траблу вижу в управлении памятью. Если на 64-битке ещё можно себе позволить отдать половину пространства под shared и половину под private, то на 32-битке с этим будет боль. А shared память хотелось бы видеть по одинаковым адресам во всех процессах, которые её юзают.
Используй линупсовый системный вызов clone для максимальной гибкости:
> clone() creates a new process, in a manner similar to fork(2).
> This page describes both the glibc clone() wrapper function and the underlying system call on which it is based. The main text describes the wrapper function; the differences for the raw system call are described toward the end of this page.
> Unlike fork(2), clone() allows the child process to share parts of its execution context with the calling process, such as the virtual address space, the table of file descriptors, and the table of signal handlers. (Note that on this manual page, "calling process" normally corresponds to "parent process". But see the description of CLONE_PARENT below.)
В glibc для Linux эти pthread-ы как раз через clone() и реализованы
угу, и для максимальной переносимости тоже
>В glibc для Linux эти pthread-ы как раз через clone()
и форки и птреды
у ядра вообще есть только клон. Все остальное лишь семантика.
это же SUS
Но MS еще в нулевых решило плыть от компа в сторону вебсервисов
Обычно он у меня выглядил вот так:
https://i.stack.imgur.com/XEeFv.jpg
Я про то, что если в 98м году MS говорил:
"Возьми С++ и сделай компонент который умеет считать бизнес-логику и сделай к нему IDL. Пусть его дергают, может даже по сети".
То в 2008м он говорил:
"Возьми С# и сделай компонент который умеет считать бизнес-логику и сделай к нему .wsdl. Пусть его дергают по SOAP, может даже по сети".
Теперь, вероятно, SOAP заменил REST.
>> Кстати, а почему сейчас нету браузера, встроенного в рабочий стол?
Может и хорошо что нет, но скоро кроме браузера не будет приложений
зы: а крузис и батлфилд где запускать-то?
Люди напишут на Haskell специальную программу для генерации кода на С++
irq[1] = function() { ... }
{
regs['ax'] = 5;
int(13);
//или так
io[1024] = 42;
}