Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 1
Регистрация: 15.07.2012
Сообщений: 38

Где определить переменные ?

15.08.2012, 12:18. Показов 882. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Есть основной Unit1.cpp где определен class TForm1 : public TForm , далее я создал Unit2.cpp в нем будет работать отдельный поток class TMyThread : public TThread вопрос в том где и как объявлять переменные чтобы с ними работать и в Unit1.cpp и в Unit2.cpp ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.08.2012, 12:18
Ответы с готовыми решениями:

Где хранятся переменные
Доброго времени суток! у меня есть шаблон класса Пусть будет Class, его параметры это тип переменной и нужное количество(думаю,...

Где обЪявить переменные?
Помогите, пожалуйста... В коде консольного приложения у меня в главной функции есть несколько переменных, которые меняются при выполнении...

Где хранятся переменные
Недавно смотрел Задорнова и он говорил: "Хлеб с маслом падает маслом вниз, а кошка падает на ноги, что будет если кошке намазать спину...

9
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.08.2012, 13:10

Не по теме:

Интересно, как это можно хвататься за программирование, не прочитав ни одной книги по предменту :ireful: ...


https://www.cyberforum.ru/post2490682.html
1
0 / 0 / 1
Регистрация: 15.07.2012
Сообщений: 38
15.08.2012, 13:46  [ТС]
Я так и делаю в Unit1.cpp объявляю DWORD data; а в Unit2.cpp extern DWORD data; да все работает я знаю , задал вопрос потому что смущает такое объявление и там и там , если это так и нужно делать тогда я буду спокоен , но как тогда быть если нужно работать с переменной в Unit1.cpp, Unit2.cpp, Unit3.cpp, Unit4.cpp, точно так же что ли в Unit1.cpp объявляю DWORD data; а во всех остальных extern DWORD data; ?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.08.2012, 15:38
Зависит от общей структуры прогаммы:

1. Сколько будет потоков?
2. Как они будут создаваться?
3. Как долго они будут существовать?
4. Будет ли уничтожаться сам класс потока?
5. ...

Переменные лучше не "подвешивать" глобально, а определять в классе формы и/или в классе потока как член класса.

И тебе нужно будет не просто определить, но и синхронизировать переменные как я понимаю?
0
0 / 0 / 1
Регистрация: 15.07.2012
Сообщений: 38
15.08.2012, 18:58  [ТС]
1. потоков будет 2 , это основной и поток для чтения данных функцией ReadFile() и пока еще не знаю куда разместить функцию записи данных WriteFile() или в этот же поток где ReadFile() или создать свой , полученные данные нужно обрабатывать в основном потоке.

2. потоки будут создаваться и существовать все время пока жив основной поток.

И тебе нужно будет не просто определить, но и синхронизировать переменные как я понимаю?
да все правильно , нужно синхронизировать , и при отладке посылать сообщения из потока чтения в основной поток.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.08.2012, 19:03
Так что поток TMyThread будет периодически отдавать данные основному потоку для дальнейшей обработки?
А для начала TMyThread нужны ли какие-то данные?

Если TMyThread буде только выводить данные на форму, то достаточно Syncronize() метода. Если нет, то можно использовать критические секции.
0
0 / 0 / 1
Регистрация: 15.07.2012
Сообщений: 38
15.08.2012, 21:26  [ТС]
Из основного потока хочу вызывать вот эту функцию которая находиться во втором потоке , при вызове нужно передать функции количество байт для чтения, и если она отработала нормально то забрать результат полученного количества байт и сами данные , помогите дописать функцию а то что то не получается как правильно определить переменные для передачи данных из тела функции StartDataRead(из BYTE BufferData1[256], в DWORD BytesLength1, из DWORD BytesRead1)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
bool __fastcall MyThread1::StartDataRead(BYTE BufferData1[256], DWORD BytesLength1, DWORD BytesRead1)
{
  OVERLAPPED ReadOL;
  DWORD WFSO;
  //-------------------------------------------------------------------------
  memset(&ReadOL, 0, sizeof(ReadOL));
  ReadOL.hEvent = CreateEvent(NULL, TRUE, TRUE, NULL);
  if(ReadOL.hEvent == NULL)
  {
    Form1->Memo1->Lines->Add("Îøèáêà CreateEvent");
    CloseHandle(HidHandle);
    CloseHandle(ReadOL.hEvent);
    return 0;
  }
  //-------------------------------------------------------------------------
  if(!ReadFile(HidHandle, BufferData1, BytesLength1, &BytesRead1, &ReadOL))
  {
    Form1->Memo1->Lines->Add("Îøèáêà àñèíõðîííîãî ÷òåíèÿ ReadFile");
    CloseHandle(HidHandle);
    CloseHandle(ReadOL.hEvent);
    return 0;
  }
  //-------------------------------------------------------------------------
  WFSO = WaitForSingleObject(ReadOL.hEvent, INFINITE);
  if(WFSO == WAIT_OBJECT_0)
  {
    if(!GetOverlappedResult(HidHandle, &ReadOL, 0, 1))
    {
      Form1->Memo1->Lines->Add("Ðåçóëüòàò ÷òåíèÿ íå ïîëó÷åí GetOverlappedResult");
      CloseHandle(HidHandle);
      CloseHandle(ReadOL.hEvent);
      return 0;
    }
    else
    {
      Form1->Memo1->Lines->Add("Ðåçóëüòàò ÷òåíèÿ ïîëó÷åí GetOverlappedResult");
    }
  }
  else
  {
    Form1->Memo1->Lines->Add("ÎØÈÁÊÀ WaitForSingleObject");
    CloseHandle(HidHandle);
    CloseHandle(ReadOL.hEvent);
    return 0;
  }
  //-------------------------------------------------------------------------
  CloseHandle(ReadOL.hEvent);
 
  return 1;
}
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.08.2012, 21:46
Ну сразу же видно что вы не ипользуте метод Syncronize() и в наглую пытаетесь выводить данные из неосновного потока Memo1- что ниЗя делать...Поэтому читайте 7-издание Архангельского...

Я так и не понял алгоритм программы... что конкретно она должна делать и в какой последовательности и сколько раз?

Почему не сделать необходимые данные членоми класса потока, создавать поток приостановленным делать устаноку начальных давнных и потом запускать поток... когда проток закончит работу пусть выводит через Synchronize() данные в Меmo или другой компонент...
0
0 / 0 / 1
Регистрация: 15.07.2012
Сообщений: 38
17.08.2012, 23:37  [ТС]
Создал еще один поток и написал в нем функцию и теперь хочу ее вызвать в основном потоке но не получается , вопросы: 1. где будет исполнятся функция, в потоке где она определена или в том где вызвал? 2. как все написать правильно чтобы вообще эту функцию можно было вызывать в основном потоке и чтобы она передавала параметры из второго потока? 3. не могу разобраться с синхронизацией где вызывать функцию синхронизации и что в ней указывать?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.08.2012, 23:52
Нельзя в потоке создать ф-цию - это абсурд... по тому как поток сам по себе является ф-цией. Класс TThread лиш обвертка этой ф-ции.

Если ф-ция вызывается из потока она там же выполняется.

как все написать правильно чтобы вообще эту функцию можно было вызывать в основном потоке и чтобы она передавала параметры из второго потока
Читай про объекты синхронизации.
3. не могу разобраться с синхронизацией где вызывать функцию синхронизации и что в ней указывать?
Я уже привел литературу в ней детально описано, кроме того в cpp класса Thread идут коментарии с примером использованиия Synchronize()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.08.2012, 23:52
Помогаю со студенческими работами здесь

Где инициализировать переменные класса?
Почему я не могу инициализировать переменную непосредственно в описании класса? class Primer { publuc: Metod1() {...}; ...

Где обьявлять глобальные переменные
Доброго времени суток. Где обьявлять глобальные переменные? Я сделал так: namespace WindowsFormsApplication3 { static class...

Где следует хранить переменные?
Дело в том, что я не программист - ни по профессии ни по жизни. Но программировать иногда кое что приходится. В связи с чем у меня возник...

Где описываются глобальные переменные?
Подскажите,где в Lazarus описываются глобальные переменные

Где почитать ? память\переменные
поисковики ни чего мне найти не могут.:ireful::ireful: Где можно почитать на русском как устроен механизм назначения/переназначения...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru