Что такое потоки в С++? У меня есть цель: создать два параллельно работающих потока. Один поток будет проводить вычисления, а второй - выводить графику (в консоли). Ума не приложу как это реализовывается, помогите пожалуйста! Двойная буферизация == два потока???
P.S. ОЧЕНЬ извиняюсь за свою непросветленность, я всего лишь студент первого курса
Deswing, создаёшь класс, для каждого потока свой. Затем в главной программе создаёшь объекты для потоков и стартуешь их при надобности. Пример/ Код заголовочного файла потока
Код
class Armstrong : public TThread { protected: void __fastcall Execute(); // функция для запуска потока public: __fastcall Armstrong(bool CreateSuspended); // создать поток замороженным или нет };
Deswing, делай как сказал мистер romgerman, и получишь зачёт
Нет, что Вы, подобному нас на первом курсе учить не планируют (вроде)) ). Это необходимость души, так сказать GameMix, спасибо большое за отклик! То есть получается, что потоки всего лишь быстро переключаются друг через друга? Но это, как я понял, решение для одноядерных процессоров? (предположу что каждый поток можно повесить на ядро. Могу глупость ляпнуть. P.S. необходимости в этом нет, это просто для справки, стало интересно). И, извините конечно, но из приведенного примера мне не особо многое понятно Можете чуть проще описать? То, что я понял: нужно создать класс "Поток", и все объекты его будут быстро переключаться между собой, тем самым переключаясь между задачами. Всякие _fastcall и armstrong я не очень понял И с моей точки зрения (точки зрения зеленого новичка) я вижу пустой класс Простите за мою неопытность, но можете немного помочь мне, объяснив или натолкнув на верную мысль?
т.е. это не моего ума дело, всё за меня решит ОС? А как они работают одновременно на одноядерных компьютерах?
Каждому потоку в системе дается определенный квант времени. По истечении этого времени поток приостанавливается и начинает выполняться следующий поток. Многие вопросы по Windows отпадут, если посмотреть тут
Так кто-нибудь может объяснить как в С++ создать поток?
Поток создается функцией beginthread. Об этих борландовских приблудах из поста #3 даже не думай. Многие вопросы по Windows отпадут, если посмотреть тут
Сообщение отредактировал Нохчи - Суббота, 21 Сентября 2013, 00:11
ф-ция из process.h? А пример самый простейший можно?
Добавлено (21.09.2013, 00:30) --------------------------------------------- нашёл _beginthread & _beginthreadex . "Стартовый адрес", "размер стека", "список аргументов"... И почему ф-ция помечена как "нативный код"? (нативный==машинный?) В общем как работать с этим мне пока не ясно
Не начинай с чего то сложного (ну или не переходи сразу на сложное). Как я понял ты пытаешься быстро выводить графику в консоли, быстрее это делать в том же OpenGL да и есть потом куда двигаться. По OpenGL полно уроков у NeHe (use google).
Мне кажется что всё таки лучше так: Высеслил Отрендерил Вычеслил Отрендерил
Иначе при многопоточности может получится что либо рендерит не обновившуюся сцену либо рендерит не до конца обновишуюся сцену, что пичально. Организатор флешмоба #100игрзанеделю
и вижу, что какой-то поток работает быстрее, а какой-то - медленнее... И вообще мне не очень ясно что происходит. Ведь так работает сразу два потока, но как после вызова первого потока вызывается второй??
Как с помощью данной функции реализовать двойную буферизацию для игры? П.с. ради устранения "блымов" в консоли
Deswing, создаёшь класс, для каждого потока свой. Затем в главной программе создаёшь объекты для потоков и стартуешь их при надобности. Пример/ Код заголовочного файла потока
Это че, билдер? *слоу*
Цитата (romgerman)
Вот ещё почитай.
Это че, не С++? *слоу*
Еще можно создавать потоки с помощью CreateThread, функция передается как DWORD WINAPI func(void*)
и вижу, что какой-то поток работает быстрее, а какой-то - медленнее... И вообще мне не очень ясно что происходит. Ведь так работает сразу два потока, но как после вызова первого потока вызывается второй??
Как с помощью данной функции реализовать двойную буферизацию для игры? П.с. ради устранения "блымов" в консоли
Если мы запустим поток, который постоянно (while(true)) выводит число 0, а главный поток (это функция main) после запуска другого потока постоянно выводит число 1, то будет выводится то 1, то 0, причем не всегда попеременно (0-1-0-1-0-1-0), а иногда так: (0-0-0-1-1-0-1-0-0-1-1-1-0-1-0-1)