- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
//main.cpp:
#define THREAD_COUNT 2
#include "winparallel.h"
main1()
{
lock(1);
int i=0; while(i++<10)
printf("1: %d\n", i);
unlock(1);
}
main2()
{
lock(1);
int i=0; while(i++<10)
printf("2: %d\n", i);
unlock(1);
}
main3(){};
main4(){};
main5(){};
main6(){};
main7(){};
main8(){};
//=====================================================================================
//winparallels.h:
#include <windows.h>
#define _MAX_CORES 8
LPVOID _void;
#define main1() DWORD WINAPI _main1(LPVOID lpParam)
#define main2() DWORD WINAPI _main2(LPVOID lpParam)
#define main3() DWORD WINAPI _main3(LPVOID lpParam)
#define main4() DWORD WINAPI _main4(LPVOID lpParam)
#define main5() DWORD WINAPI _main5(LPVOID lpParam)
#define main6() DWORD WINAPI _main6(LPVOID lpParam)
#define main7() DWORD WINAPI _main7(LPVOID lpParam)
#define main8() DWORD WINAPI _main8(LPVOID lpParam)
DWORD WINAPI _main1(LPVOID);
DWORD WINAPI _main2(LPVOID);
DWORD WINAPI _main3(LPVOID);
DWORD WINAPI _main4(LPVOID);
DWORD WINAPI _main5(LPVOID);
DWORD WINAPI _main6(LPVOID);
DWORD WINAPI _main7(LPVOID);
DWORD WINAPI _main8(LPVOID);
HANDLE _locks[_MAX_CORES];
int _argc; char **_argv;
void lock(int n) { DWORD res = WaitForSingleObject(_locks[n], INFINITE); }
void unlock(int n) { ReleaseMutex(_locks[n]); }
int main(int argc,char **argv) {
HANDLE threads[_MAX_CORES];
DWORD id;
int THREADS = THREAD_COUNT;
if (THREADS<=0) {
SYSTEM_INFO sysinfo;
GetSystemInfo(&sysinfo);
THREADS = sysinfo.dwNumberOfProcessors;
if (THREADS>_MAX_CORES) THREADS = _MAX_CORES;
}
_argc = argc; _argv = argv;
_locks[0] = CreateMutex(NULL,FALSE,NULL);
_locks[1] = CreateMutex(NULL,FALSE,NULL);
_locks[2] = CreateMutex(NULL,FALSE,NULL);
_locks[3] = CreateMutex(NULL,FALSE,NULL);
_locks[4] = CreateMutex(NULL,FALSE,NULL);
_locks[5] = CreateMutex(NULL,FALSE,NULL);
_locks[6] = CreateMutex(NULL,FALSE,NULL);
_locks[7] = CreateMutex(NULL,FALSE,NULL);
threads[0]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)_main1,NULL,0,&id);
if (THREADS>=2)
threads[1]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)_main2,NULL,0,&id);
if (THREADS>=3)
threads[2]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)_main3,NULL,0,&id);
if (THREADS>=4)
threads[3]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)_main4,NULL,0,&id);
if (THREADS>=5)
threads[4]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)_main5,NULL,0,&id);
if (THREADS>=6)
threads[5]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)_main6,NULL,0,&id);
if (THREADS>=7)
threads[6]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)_main7,NULL,0,&id);
if (THREADS>=8)
threads[7]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)_main8,NULL,0,&id);
WaitForMultipleObjects(THREADS, threads, TRUE, INFINITE);
return 0;
}
bormand 05.03.2013 20:26 # +5
А еще здесь не обошлось без бога копипасты... Потоки юзаем, а циклов не знаем...
P.S. Конструктор лего прям: вот тебе 8 локов и 1-8 потоков, собирай из них говно пирамидку, играйся... Треды для детей 3-5 лет.
bormand 05.03.2013 20:32 # +5
LispGovno 05.03.2013 20:37 # +2
eth0 05.03.2013 21:28 # +2
Жаль, синтетоты слишком много и всё больше и больше. Нормального, не школоло, не PHP, не даты, не, не, не, а вполне промышленного загадочного или смешного кода осталось даже не через раз.
Vindicar 05.03.2013 22:13 # +2
govnomonad 06.03.2013 04:23 # +5
absolut 06.03.2013 09:35 # +7
Ccik 07.03.2013 05:56 # 0
govnomonad 07.03.2013 06:59 # +5
против кода - использование платформозависимых сущностей, plain C style в разделе C++. Не говоря уже про кривой код
Ccik 07.03.2013 11:43 # 0
подробнее
defecate-plusplus 07.03.2013 11:55 # +4
bormand 07.03.2013 12:12 # 0
В семерке\висте пуск намноого более убогий. Я вот могу его юзать только как строку поиска... А скроллить его и искать в нем значки, непонятно как раскиданные по папкам - нет уж, увольте.
Метрошные плеер и ие отлично подходят для отдыха - полный экран, крупное и удобное управление, а что еще нужно? А для работы метро уй майкрософт и не предлагает.
defecate-plusplus 07.03.2013 12:20 # +2
меня устраивает связка Classic Shell + Launchy, решающая все проблемы компактности меню пуск и запуска часто используемых программ с клавиатуры в пару нажатий
в пуске причем раскиданы по алфавиту, разве в дефолтном пуске не так?
а вот жить совсем без пуска я не готов
зы. впрочем, дефолтный пуск в висте/семерке тоже дерьмище, ухудшение пуска у микрософта начались еще с xp, но в той хоть можно было системную галочку выставить "верните мне классический вид, суки"
так что неудивительно, что смена одного говна (пуск в семерке) на другое говно (метро уй) пользователями воспринята
bormand 07.03.2013 12:39 # 0
Дык приходится вспоминать какая фирма придумала нужную мне прогу. В той же линухе категории адекватны - игры, разработка, система и т.п. А тут - foobar software, necrosoft corporation и прочие малознакомые личности...
> Launchy
Да, удобная штука.
> ухудшение пуска у микрософта начались еще с xp
Да, в хр всегда гонял его на классическом виде.
Ну а по метрошному пуску - там хоть можно часто используемые проги разместить на одном экране, и их количество не ограничено десятком как в семерочном пуске...
Xom94ok 07.03.2013 20:02 # 0
>>дефолтный пуск в висте/семерке тоже дерьмище
Не согласен. Мне привычно нажать Win, набрать первые три-четыре буквы названия программы и нажать Enter, а наиболее часто запускаемые программы закрепляются в лаунчере и вызываются по Win+цифра. И мне адски не хватает этих штук, когда я сажусь за машину с установленной хрюшей.
3.14159265 07.03.2013 21:00 # +1
>часто запускаемые программы закрепляются в лаунчере и вызываются по Win+цифра
Ну вот я и говорю - попробуй консольные приложения, они заточены под клавиатуру.
Xom94ok 07.03.2013 21:56 # 0
Примерно теми же словами мне сокурсники предлагали попробовать травку :)
Пока я писал комментарий про убогость виндового cmd.exe по сравнению с gnome-terminal, вдруг вспомнил про PowerShell. Неужели в Windows появилось подобие нормального терминала?
roman-kashitsyn 07.03.2013 21:58 # +2
Xom94ok 07.03.2013 22:20 # 0
wvxvw 07.03.2013 23:08 # 0
Добавил симлинков в Сигвниновский /usr/bin на всякие папки внутри Program Files (пришлось немножко с UAC побороться, но получилось в итоге).
Единственное - что не победил: IIS, эти уроды его положили в Windows/System32 и еще части в Windows/WoW64. И там уже фиг знает, как их рассекретить, искал по регистри, но ничего путнего не нашел. И еще эта урдоская программа все свои файлы настроек создает от имени администратора.
Вобщем, жить можно, но не хочется. - Открыть файл программой зарегистрированой для расширения этого файла.
eth0 07.03.2013 16:24 # 0
На восьмёрке я до сих пор не знаю вменяемого способа попасть в панель управления не за пять нажатий.
Есть и в пуске свои плюсы, не только относящиеся к списку приложений.
bormand 07.03.2013 16:32 # 0
3.14159265 07.03.2013 16:37 # 0
Надо и самому попробовать Meteroism UI. Уже представляю маркетолога, составляющего превью:
Чую такими темпами как они делают утомленные пользователи мс начнут массово пересаживаться на консоль.
eth0 07.03.2013 21:45 # 0
P.S. Ещё в восьмёрке совершеннейше препоганая виртуальная клавиатура, но это уже совсем другая история.
bormand 06.03.2013 07:33 # +4
http://pastebin.com/mqgFYfBR
bormand 06.03.2013 07:56 # +4
absolut 06.03.2013 09:36 # +2
LispGovno 06.03.2013 09:40 # +1
3.14159265 07.03.2013 15:39 # +4
Вот только lock1.unlock() должно вызываться и при исключениях.
Может как-то использовать RAII и деструктор для этой цели.
roman-kashitsyn 07.03.2013 15:47 # +5
В Boost.Interprocess есть примитивы для всяческих извращений.
3.14159265 07.03.2013 15:53 # +1
defecate-plusplus 07.03.2013 15:55 # +2
буст.тред и комплектный с ним mutex/scoped_lock, либо его копипаст в c++11
вообще интерпроцесс неоднозначная либа, в целях покрыть вообще все возможные платформы они решили, что единственный выход - эмулировать все межпроцессные вещи через шаред мемори
roman-kashitsyn 07.03.2013 21:39 # 0
defecate-plusplus 08.03.2013 14:11 # 0
absolut 08.03.2013 14:19 # +2
defecate-plusplus 08.03.2013 14:26 # +2
в реальной жизни же не всегда бывают настолько изолированные части одной системы, что отказ одной части вообще никак не повлияет на работу другой и всей системы в целом
roman-kashitsyn 08.03.2013 14:31 # 0
bormand 07.03.2013 15:55 # +2
bormand 07.03.2013 16:15 # 0
Не может ли получиться так, что unlock() вызовется дважды? Ведь, емнип, конструкция A a = b; сначала создает временный объект с помощью конструктора A(b), а затем вызывает конструктор копирования, после чего разрушает временную копию.
defecate-plusplus 07.03.2013 16:30 # 0
но move semantics спасут крестного отца
bormand 07.03.2013 16:34 # 0
bormand 07.03.2013 16:39 # 0
3.14159265 07.03.2013 16:23 # +1
Помню тут еще TheCalligrapher пояснял этот хак с областями видимости и багом VC. Кстати а куда он исчез? Жаль на гк нету способа показать все посты, можно было издать книгу "Издательство Говнокод"
Такой же трюк можно и с файлом сделать
Или в бусте уже есть готовое?
bormand 07.03.2013 16:27 # 0
absolut 07.03.2013 17:56 # +4
Это был сиамский близнец, после разделения ставший @defecate-plusplus & @bormand
P.s. На тему поиска комментов:
http://bit.ly/WwDRup
3.14159265 07.03.2013 18:34 # +1
Хе-хе-хе. А Тарас (τορἄς) неделим по определению.
>bit.ly/WwDRup
Та я тоже так умею. Не очень удобно - сортировки нет.
defecate-plusplus 08.03.2013 14:07 # +1
someone 06.03.2013 10:25 # +1
absolut 06.03.2013 11:16 # +5
bormand 06.03.2013 11:40 # +1
roman-kashitsyn 06.03.2013 13:38 # 0
Bart 06.03.2013 14:08 # 0
roman-kashitsyn 06.03.2013 14:13 # +2
bormand 06.03.2013 15:31 # +4
Не совсем так. Обама же не родился президентом, и через несколько лет передаст полномочия другому. Поэтому Обама содержит в себе адаптер, реализующий интерфейс "Президент", ссылка на который помещена в свойство "президент" объекта "США".
roman-kashitsyn 06.03.2013 15:57 # +6
govnomonad 06.03.2013 16:34 # +4
roman-kashitsyn 06.03.2013 17:56 # +7
LispGovno 06.03.2013 18:05 # +3
LispGovno 06.03.2013 20:53 # −2
bot 06.03.2013 22:18 # −2
Как? И он тоже?
Bart 06.03.2013 17:44 # 0
Вследствие чего вызовется
ибо каждый президент США, в конце-концов, человек. Зато при
будет бяка, поскольку такая неявность недопустима.
Я к чему: если Человек и Чужой различны для бытия президентом США, как минимум, структурой организма, то чем для сего будут отличаться Человек и typedef Человек ЧеловекДвойноеСловоИлиВтороеИмяПрямоходя щегоПредставителяГуманоидов?
Разница будет лишь для потомков, которым выпадет читать подобную писанину истории и догадываться, что Пабло, Непомукено и Ремедиос - это в се тот же Пикассо.
DBdev 06.03.2013 14:53 # +6