Форум программистов, компьютерный форум CyberForum.ru

Как сделать "Старт", "Пауза", Стоп"? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ ребус http://www.cyberforum.ru/cpp-beginners/thread746515.html
# include <iostream> # include <stdio.h> # include <conio.h> # include <math.h> using namespace std; int main() {int d=0,r=0,u=0,g=0,s0,s1,sum; cout <<"Rebus"; do { * do { * * * if(r==d) continue; do { * * * * * if((u==d) || (u==r)) continue; do { * * * * * * if((g==d) || (g==r) || (g==u)) continue; * * * * * * s0=((d*1000)+(r*100)+(u*10)+g); * * * * * * s1=((g*1000)+(u*100)+(r*10)+d); * * * * *...
C++ Как правильно перегружать унарный минус? Дайте правильный прототип перегрузки унарного минуса. http://www.cyberforum.ru/cpp-beginners/thread746508.html
Деление длинного на длинное C++
#ifndef INTEGERLONGS_HPP_INCLUDED #define INTEGERLONGS_HPP_INCLUDED //================================================================================================= namespace Longs { class TInteger; }; //================================================================================================= class Longs::TInteger {
C++ Как переделать эту прогу в шаблон классов "Двусвязный список" произвольных элементов
#include <iostream.h> #include <stdlib.h>2 #include <conio.h> using namespace std; struct Element { public: double data; //сами данные
C++ контейнеры STL и виды деревьев http://www.cyberforum.ru/cpp-beginners/thread746500.html
подскажите, или покажите где есть эта информация например я знаю, что контейнеры map и set реализованы через красно-черное дерево через "какие" деревья\другие структуры данных реализованы остальные контейнеры? vector, string, list, etc и по каким причинам(от деревьев и их "родных" структур данных) один контейнер лучше другого по каким-либо параметрам. Векторы являются неэффективными для...
C++ простые числа от 1 до 10000 Написать программу, которая выводит на экран все простые числа в диапазоне от 1 до 10000 и находит их количество. подробнее

Показать сообщение отдельно
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
07.01.2013, 18:14     Как сделать "Старт", "Пауза", Стоп"?
Ну вот, то, о чём я и говорил. Задержка в 1 секунду не допускается, но она есть. Вот и таймер.
Но и мой способ не подойдёт по этой же самой причине. Если его использовать, тогда управляющий поток должен передать управление рисующему потоку, который точно также будет чего-то расчитывать в течении1-ой секунды, а, поскольку он в это время будет владеть окном, та же задержка в управлении и выйдет. Только реализация ещё труднее.

Что же делать?

Нужен симбиоз решений.
Пусть у тебя рисует всё в таймере- у то есть через 100 миллисекунд к примеру. Это нормально. Но все расчёты пуст делаются в ДРУГОМ потоке.
Ну то есть как-то так:

---в потоке A нажал старт-> создался параллельный поток B (чисто для расчётов, он окно не занимает)

(Теперь по расчётам. Я так понимаю, все данные для расчётов формируются динамически, иначе их просто можно было расчитать до начала отрисовки, а потом махом всё отрисовать. То есть

произошла отрисовка- новые данные
произошла отрисовка- новые данные
произошла отрисовка- новые данные
произошла отрисовка- новые данные

Отсюда вывод: по каждому расчёту поток B должен приостанавливать свою деятельность и ждать, сигнала "произошла отрисовка", после этого генерить новые данные и посылать их потоку A).
---В потоке B делается расчёт и посылается об этом сигнал потоку A; поток B приостанавливает деятельность
---Поток A отрисовывает чё надо и посылает сигнал об этом потоку B
---В потоке B делается расчёт и посылается об этом сигнал потоку A; поток B приостанавливает деятельность
---Поток A отрисовывает чё надо и посылает сигнал об этом потоку B

И так сколько нам надо раз. Можно сделать, чтобы поток B сделал, к примеру 10 расчётов по 1-ой секунде каждый после чего самоубился. Тогда вся работа займёт примерно 1- секунд- то же самое, что и в твоём варианте с той лишь разницей, что в эти 10 секунд окно тормозить не будет .
Можно просто напросто реализовать убиение потока по нажатию кнопки стоп.

Я тебе сразу говорил с кандачка эту задачу не решить.

Не по теме:

А в билдере, как я понял, надо только подумать и синхронизацию прописывать не надо, всё само пропишется.



И напоследок ты спросишь- а где тут таймер? Как видишь, обошлись без него. Ведь для чего он нам нужен был? Чтобы циклично выполнялись какие-то действия (перерисовка). Но тут таймером может с успехом служить поток B- всякий раз по окончании расчётов он посылает сигнал об этом потоку A; так что не будем плодить лишние сущности.

Щас изобразим. Сразу говорю- кнопки пауза не будет, кроме того. Данные потоку B передаваться не будут. Передача динамически формирующихся данных- это отдельная тема. Вместо этого будет например семафор какой-нибудь (тоже вид данных своего рода),
то есть так:

поток B расчитал- сбросил флаг
поток A отрисовал- установил флаг


Считай что флаг это и есть данные
 
Текущее время: 19:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru