powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / проблема с потоком
2 сообщений из 2, страница 1 из 1
проблема с потоком
    #38024552
spyker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет=)
Помогите пожалуйста, n-ый день сижу с прогой и никак не могу понять следующую проблему:

Допустим у меня есть график синуса, есть функция поиска минимального и максимального значения для того чтобы вписать график в окно.
вот она:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
void Cgrafic1Dlg::zoom(vector <vector<double>>A)
{
	for(int i=0;i<2;i++)
	{
		double max1=A[i][0];
		double min=A[i][0];

		for(int j=0;a=A.size(),j<a;j++)
		{
			if(max1<A[i][j]) max1=A[i][j];
			if(min>A[i][j]) min=A[i][j];
		}

		if(max1>l)
		{
			l=max1+max1/4;
			n=-max1-max1/4;
		}
		
	}
}



допустим я меняю амплитуду у синуса, соответственно я должен пересчитать все по кнопочке, реализовываю вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
void Cgrafic1Dlg::OnBnClickedButton12()
{
	//OnBnClickedButton3();
	//ResumeThread(hThread);
	//Invalidate(0);
	Y=func(A1,w1,phi1,nn,Fd,0);
	Y1=func1(A2,w2,phi2,nn,Fd,0);
	G=D(Y,Y1);
	zoom(G);

	if(WaitForSingleObject(h_data,20)==WAIT_OBJECT_0)
	{

		Draw(&pMemDc,rect,G,color);
		//frameDC->BitBlt(0,0,rect.Width(),rect.Height(),&pMemDc,0,0,SRCCOPY);
		SetEvent(h_data);
		//CDialog::OnPaint();
	}
	
	// TODO: добавьте свой код обработчика уведомлений
}


По нажатию этой кнопки график сразу же должен вписаться в окно, а этого не происходит, приходится понажимать несколько раз(потому что никаких реакций нет), а потом сразу подгоняет все. Помогите пожалуйста с этой проблемой=)
...
Рейтинг: 0 / 0
проблема с потоком
    #38033432
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 spyker:

spyker
Код: plaintext
1.
void Cgrafic1Dlg::zoom(vector <vector<double>>A)



Тут лишнее копирование STL-контейнера при передаче в функцию. Чтобы этого избежать, надо передавать по const-ссылке:
Код: plaintext
1.
void Cgrafic1Dlg::zoom(const vector<vector<double>>& A)



spyker
Код: plaintext
1.
for(int j=0;a=A.size(),j<a;j++)



Скорее всего, имелось в виду «A[i].size()». Ну и начинать можно с j = 1. Ну и перепутаны местами «;» и «,».

spykerдопустим я меняю амплитуду у синуса, соответственно я должен пересчитать все по кнопочке, реализовываю вот так:
Код: plaintext
1.
2.
void Cgrafic1Dlg::OnBnClickedButton12()
...



Как-то странно вы делаете, чего-то намудрили с event-ом (который объект ядра). Обычный способ такой: при изменении каких-то параметров (например, zoom-а) делаем InvalidateRect на viewport, сообщая таким образом системе, что viewport требует перерисовки. После чего система когда-нибудь в будущем пошлёт нашей программе сообщение WM_PAINT, обрабатывая которое наша программа перерисует содержимое viewport-а.

spyker
Код: plaintext
1.
// TODO: добавьте свой код обработчика уведомлений



MFC что ли? Бросайте пить, курить и MFC :).
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / проблема с потоком
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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