powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / QueryPerformanceCounter на разных компьютерах, разные значения
11 сообщений из 11, страница 1 из 1
QueryPerformanceCounter на разных компьютерах, разные значения
    #39377412
bdm77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Есть две программа, которые бегут на разных компьютерах, в "главном цикле", в функцию tick(dt) передаю сколько времени прошло с предыдущей операции, так вот функция QueryPerformanceCounter((LARGE_INTEGER*)&current); возвращает current разный.. отличие, почти в два раза!

Может есть идеи, как сделать , что бы было одно и тоже время..(+- несколько миллисеккунд)


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
                __int64 freq, prev, current, diff;
                m_simulationStepTime = 0.02 ;
		QueryPerformanceFrequency((LARGE_INTEGER*)&freq);
		QueryPerformanceCounter((LARGE_INTEGER*)&prev);

		while (!m_exit) {
			QueryPerformanceCounter((LARGE_INTEGER*)&current);
			diff = current - prev;
			prev = current;
			double dt = (double)diff / freq;
			
			tick(dt);
			
			printf("%s: dt = %f\n", __FUNCTION__, dt);
			
			boost::this_thread::sleep(boost::posix_time::milliseconds(m_simulationStepTime * 1000));
		}
		return 0; 
...
Рейтинг: 0 / 0
QueryPerformanceCounter на разных компьютерах, разные значения
    #39377579
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bdm77 QueryPerformanceCounter так он от железа зависит, потому и разный
...
Рейтинг: 0 / 0
QueryPerformanceCounter на разных компьютерах, разные значения
    #39377987
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bdm77,
сделайте так, чтобы поток на первой ВМ выполнялся медленнее в два раза;)

Вы бы подробнее описали, что вы хотите получить. Вам нужно синхронизировать потоки?
...
Рейтинг: 0 / 0
QueryPerformanceCounter на разных компьютерах, разные значения
    #39378379
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
	LARGE_INTEGER Frq_Base, Time_memo, Time_now, dif;
	QueryPerformanceFrequency(&Frq_Base);
	QueryPerformanceCounter(&Time_memo);        // начальное значение

	// smth to do

	QueryPerformanceCounter(&Time_now);
	dif.QuadPart = ((Time_now.QuadPart - Time_memo.QuadPart) * 1000000) / Frq_Base.QuadPart;
...
Рейтинг: 0 / 0
QueryPerformanceCounter на разных компьютерах, разные значения
    #39378597
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на сколько я понимаю, sleep может проснутся не обязательно через указанное время. просто через это вермя поток будет говотов выполнятся. но когда оно закончится будет выполнятся другой поток, квант которого еще не знакончился. поток, у которого закончился sleep пойдет только после него.
...
Рейтинг: 0 / 0
QueryPerformanceCounter на разных компьютерах, разные значения
    #39380470
bdm77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SashaMercurybdm77,
сделайте так, чтобы поток на первой ВМ выполнялся медленнее в два раза;)

Вы бы подробнее описали, что вы хотите получить. Вам нужно синхронизировать потоки?

Бегут две программы на разных компах.. (Master, Slave)
Master - посылает команду старт и начинают вместе выполнять процедуру (передвижение объекта по карте), и они должны двигаться синхронно.. но из-за того, что приходят разные значение, то на одном компе, один объект двигается быстрее второго..

Скорее всего проблема в алгоритме движение объекта..
Как решение, синхронизтровать две программы..
...
Рейтинг: 0 / 0
QueryPerformanceCounter на разных компьютерах, разные значения
    #39380483
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bdm77Master - посылает команду старт и начинают вместе выполнять процедуру (передвижение
объекта по карте), и они должны двигаться синхронно..

"Ой ёёё...."

Бесперспективняк. Чисто таймингами ты не добьёшься приличной синхронности. Тут
динамическая подстройка и точная синхронизация положения на каждый чих нужна.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QueryPerformanceCounter на разных компьютерах, разные значения
    #39380498
bdm77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovbdm77Master - посылает команду старт и начинают вместе выполнять процедуру (передвижение
объекта по карте), и они должны двигаться синхронно..

"Ой ёёё...."

Бесперспективняк. Чисто таймингами ты не добьёшься приличной синхронности. Тут
динамическая подстройка и точная синхронизация положения на каждый чих нужна.


Это не для движения спутников, где точно до миллиметра нужна..
Плюс минус 5-10 метров..
...
Рейтинг: 0 / 0
QueryPerformanceCounter на разных компьютерах, разные значения
    #39380507
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bdm77Это не для движения спутников, где точно до миллиметра нужна..
Плюс минус 5-10 метров..
да какая разница - писать нужно сразу нормально
...
Рейтинг: 0 / 0
QueryPerformanceCounter на разных компьютерах, разные значения
    #39380800
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bdm77,
QueryPerformanceFrequency((LARGE_INTEGER*)&freq); если в цикл перенести, так же?
...
Рейтинг: 0 / 0
QueryPerformanceCounter на разных компьютерах, разные значения
    #39385868
bdm77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan),

получилось вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
                __int64 freq, prev, current, diff;
                m_simulationStepTime = 0.02 ;
                double m_dt = 0.0; 
		QueryPerformanceFrequency((LARGE_INTEGER*)&freq);
		QueryPerformanceCounter((LARGE_INTEGER*)&prev);

		while (!m_exit) {
			QueryPerformanceCounter((LARGE_INTEGER*)&current);
			diff = current - prev;
			prev = current;
			double dt = (double)diff / freq;
			
                        m_dt += dt;

                        if(m_dt > m_simulationStepTime ){
			     tick(dt);
                             printf("%s: dt = %f\n", __FUNCTION__, dt);
                             m_dt = 0.0;
			}
		}
		return 0; 
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / QueryPerformanceCounter на разных компьютерах, разные значения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]