Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
1

Получить значение переменной из потока без создания глобальных переменных

08.08.2014, 12:33. Показов 1638. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall Pars::Execute()
{
    Synchronize(&UpdateCaption);
}
//---------------------------------------------------------------------------
void __fastcall Pars::UpdateCaption()
{
    int k;
    k = Form1->ListBox3->Count + Form1->ListBox5->Count + Form1->ListBox6->Count;
    ShowMessage(k);
}
Вопрос : можно ли получить каким-либо образом значение переменной k в Execute() ? При этом не делая k глобальной переменной.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.08.2014, 12:33
Ответы с готовыми решениями:

Без глобальных переменных.
1. void __fastcall TForm2::FormClick(TObject *Sender) { TPoint pt; GetCursorPos(&pt); ...

Обойтись без использование глобальных переменных
Столкнулся на этапе написания программы с тем что необходимо анализировать данные за разный...

Получить значение переменной из другого потока
Всем привет! Есть процедура, которая вызывает другую процедуру, но они работают в разных потоках....

Массив (переписать без глобальных переменных)
Помогите написать ету програму без глобальных переменных #include <cstdlib> #include...

13
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
08.08.2014, 12:43 2
Не надо глобальной, опиши в приватной секции класса - потомка TThread
1
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
08.08.2014, 12:44 3
объявить k в классе Pars
1
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.08.2014, 13:06 4
Ну вероятно можно еще попробовать использовать TIdSync.
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
08.08.2014, 13:10  [ТС] 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall Pars::Execute()
{
    Synchronize(&UpdateCaption);
    ShowMessage (ReturnCountP());
}
//---------------------------------------------------------------------------
void __fastcall Pars::UpdateCaption()
{
    ReplaceCountP(Form1->ListBox3->Count + Form1->ListBox5->Count + Form1->ListBox6->Count);
}
//---------------------------------------------------------------------------
int __fastcall Pars::ReturnCountP() 
{
       return CountP;
}
 
void __fastcall Pars::ReplaceCountP(int count)
{
    CountP = count;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
class Pars : public TThread
{
private:
    int CountProxy;
protected:
    void __fastcall Execute();
public:
    __fastcall Pars(bool CreateSuspended);
    void __fastcall Pars::UpdateCaption();
    int __fastcall Pars::ReturnCountP(); 
    void __fastcall Pars::ReplaceCountP(int count);
};
Появляются ошибки :
HTML5
1
2
Canvas does not allow drawing
Abnormal program termination
Как нужно работать с методами класса?
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
08.08.2014, 13:14 6
Ну и чтобы твой k во время считывания одним потоком не менялся бы другим потоком.
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
08.08.2014, 13:15  [ТС] 7
gumi250 кол-во потоков фиксировано и равняется одному.
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
08.08.2014, 13:17 8
еще есть главный поток
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
08.08.2014, 13:24  [ТС] 9
gumi250, это да.
Но все же вопрос остался "Как нужно работать с методами класса?".
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
08.08.2014, 13:30 10
Gdasar, ShowMessage тоже должен использоваться через Synchronize, если что...
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
08.08.2014, 13:38  [ТС] 11
Цитата Сообщение от gumi250 Посмотреть сообщение
Учебник по С++ вам поможет.
Подскажите название учебника.
Цитата Сообщение от UI Посмотреть сообщение
ShowMessage тоже должен использоваться через Synchronize, если что...
Так я пробовал.
C++
1
2
3
Synchronize(&ShowMessage(ReturnCountProxy()));
//или
Synchronize(ShowMessage(ReturnCountProxy()));
Не работает - выдает ошибки.
HTML5
1
2
[BCC32 Error] Unit2.cpp(31): E2109 Not an allowed typeFull parser contex tUnit2.cpp(29): parsing: void _fastcall Pars::Execute()
[BCC32 Error] Unit2.cpp(31): E2285 Could not find a match for 'TThread::Synchronize(void)'Full parser context Unit2.cpp(29): parsing: void _fastcall Pars::Execute()
Или мне нужно описать новый метод класса?
0
74 / 54 / 17
Регистрация: 10.07.2014
Сообщений: 329
08.08.2014, 14:11 12
В Синхронайзе можно вызывать методы только без параметров.
то есть ф-ция
C++
1
2
3
4
5
void Pars::MyShow()
{
  ShowMessage(...)
}
Synchronize(&MyShow);
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
08.08.2014, 14:56 13
Цитата Сообщение от krv Посмотреть сообщение
можно вызывать методы только без параметров
По поводу этого вопроса можно посмотреть вот здесь.
0
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
09.08.2014, 08:04 14
Gdasar, а зачем в потоке, без всяких задержек, со скоростью в несколько ГГц, выводить ShowMessage? Это ничего, что каждый раз создаётся новый MessageBox?
0
09.08.2014, 08:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.08.2014, 08:04
Помогаю со студенческими работами здесь

Исправить без использования глобальных переменных
#include<iostream> using namespace std; int a,n,maximum=-1000,x; void zapros() { ...

Написать программу "Угадай число от 0 до 100" без использования глобальных переменных
Задача передо мной стояла следующая: написать программу "Угадай число от 0 до 100" без...

Процедура без глобальных переменных для вывода суммы элементов матрицы и номера строки с минимальной суммой элементов
Задание: составить процедуру без глобальных переменных выполняющуюю для для матрицы D с размерами...

Рассмотреть программу, написать имена глобальных переменных, локальных переменных, формальных параметров
Program P1; var s:string; procedure P(var s:string) ; var i, j : integer; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru