|
6 / 6 / 1
Регистрация: 01.06.2012
Сообщений: 107
|
||||||
Обращение к переменной из потока06.06.2012, 08:10. Показов 10409. Ответов 30
Метки нет (Все метки)
Что то не пойму, меняю переменною(int j объявленную в public в основном потоке) из потока запущенного из основного.
0
|
||||||
| 06.06.2012, 08:10 | |
|
Ответы с готовыми решениями:
30
Обращение к переменной из одного потока в другом Обращение к элементу WinForms из потока, отличного от потока, в котором это элемент был создан Возможно ли обращение к переменной с использованием значения строковой переменной? |
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||||||
| 06.06.2012, 08:46 | |||||||
|
Значит ты меняешь не переменную j в основном потоке, а её копию. Попробуй вынести j из формы и объявить с модификатором:
Добавлено через 2 минуты директива extern
0
|
|||||||
|
6 / 6 / 1
Регистрация: 01.06.2012
Сообщений: 107
|
|||||||||||||||||||||
| 06.06.2012, 08:59 [ТС] | |||||||||||||||||||||
|
Так вот думаю в сторону extern
Но у меня присутвует здесь некоторый туман, как правильно делать. Я создал h file GL.h
сделал так
0
|
|||||||||||||||||||||
|
return (true);
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
|
|
| 06.06.2012, 09:17 | |
|
А не пробовали передавать указатель на переменную в поток? Это всяко кошерней
0
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||||||||||||
| 06.06.2012, 09:21 | ||||||||||||||||
|
Ты не понял про копирование переменных. Пока модуль один, можно сколько угодно h и cpp файлов инкладить в один и юзать именно такие переменные и они будут действительно подключаться. Но когда модулей много, то в каждом своя глобальная область видимости и когда какой нибудь модуль инкладит файл с объявлением переменной, или в нём дублируется объявление переменной, то он её копирует. Можно даже в разных модулях объявить глобальные переменные с одним именем и разными типами, они не будут даже копиями. Тебе же нужна область видимости на уровне программы в целом, а в неё включаются только функции и те переменные и константы, которые имеют модификатор extern. Причём, если ты в каком нибудь модуле extern уберёшь, то в нём будет копия. А все модули, в которых одно и то же данное объявлено с модификатором extern подключают себе один и тот же его экземпляр, не копируя. Кроме того, какой толк объявлять глобальные переменные в файле, который не инкладится во все cpp файлы проекта? Ведь дублировать же придётся.
0
|
||||||||||||||||
|
6 / 6 / 1
Регистрация: 01.06.2012
Сообщений: 107
|
||||||||||||||||||||||
| 06.06.2012, 09:31 [ТС] | ||||||||||||||||||||||
|
Добавлено через 6 минут Значит так? Я создал h file GL.h
0
|
||||||||||||||||||||||
|
return (true);
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
|
|||||||
| 06.06.2012, 09:38 | |||||||
1
|
|||||||
|
6 / 6 / 1
Регистрация: 01.06.2012
Сообщений: 107
|
||
| 06.06.2012, 09:52 [ТС] | ||
|
и самое главное что сделал так как сам выше написал, по последнему варианту.........программа копилируется но матюков , что переменная объявлена везде дохрена!
Добавлено через 6 минут Я так понимаю, что у тебя альтернативный вариант!....и у него есть какието неведомые для меня преимущества...... Но по приведенному тобой примеру мне непонятно....как задать переменной из основного потока значение как это значение поменять из другого потока, и как его посмотреть из третьего потока!
0
|
||
|
|
|||||||
| 06.06.2012, 10:01 | |||||||
GL.h - не думаю что это хорошее название для файла, так как такой файл может существовать ( Open GL)
1
|
|||||||
|
return (true);
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
|
||||
| 06.06.2012, 10:03 | ||||
|
0
|
||||
|
6 / 6 / 1
Регистрация: 01.06.2012
Сообщений: 107
|
||||||||||||||||||
| 06.06.2012, 10:24 [ТС] | ||||||||||||||||||
|
Да данные могу то дать но это бесполезные простыни...
вот ниже основной поток присваивает переменной StFinishTAUFThread=1, а поток когда всё необходимое сделает должен переменной присвоить StFinishTAUFThread=0 из основной формы
Добавлено через 3 минуты
0
|
||||||||||||||||||
|
|
|
| 06.06.2012, 10:26 | |
|
0
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||
| 06.06.2012, 10:33 | |||
|
Добавлено через 3 минуты
0
|
|||
|
6 / 6 / 1
Регистрация: 01.06.2012
Сообщений: 107
|
||
| 06.06.2012, 10:35 [ТС] | ||
|
Но вот уже точно знаю...что переменная объявленная в основном потоке в h файле глобальных переменных! int y; не всегда будет изменяться из другого потока таким образом Form1->y=1; у меня две одинаковых переменных, одна меняется вторая нет!...мистика
0
|
||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 06.06.2012, 10:36 | |
|
0
|
|
|
|
|||
| 06.06.2012, 10:47 | |||
Добавлено через 5 минут
0
|
|||
|
6 / 6 / 1
Регистрация: 01.06.2012
Сообщений: 107
|
||||||
| 06.06.2012, 11:40 [ТС] | ||||||
|
кажится понял с указателями .......щас попробую если получится приведу, свой тупняк
Добавлено через 36 минут Да лыжи вапще не едут! В основном потоке, запускаю другой поток и передаю ему указатель
short *StTauf00; в execute потока присвоил *StTauf00=1; и после действий CoInitialize(NULL); хоть за присваиваяйся в потоке .....Хрен чё будет! Добавлено через 11 минут вот думал что будет тут засада!...и чё теперь делать, как обходить? если уберу CoInitileze будет ошибка
0
|
||||||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||
| 06.06.2012, 11:48 | |||
|
1. Увеличивается на 1 младшая половина i. 2. В этот момент может влезть второй поток. 3. Если младшая половина обнулилась в п.1., то увеличивается на 1 старшая часть. Пример: i==65535, sizeof(i)=4, а шина 2 байта, выполняем ++i: 1. LOWORD(i)==65535, HIWORD(i)==0. 2. ++LOWORD(i). 3. LOWORD(i)==0, HIWORD(i)==0, то есть i=0. Значение ещё не правильно. 4. в этот момент может влезть второй поток и прочитать не правильное значение. 5. if (в п.3. LOWORD(i)==0) ++HIWORD(i); 6. LOWORD(i)==0, HIWORD(i)==1, то есть i=65536. Значение уже правильно. Теперь тот же счётчик влезает в 4-х байтную шину: i==65535, sizeof(i)=4, а шина 4 байта, выполняем ++i: 1. ++i. 2. i=65536. Значение уже правильно. 3. В этот момент может влезть второй поток. Или 1. В этот момент может влезть второй поток. i=65535, но для данного момента это ещё правильное значение. 2. ++i. 3. i=65536. Значение уже правильно. Где нарушение логики? А вот если переменная связана с чем то ещё, то ты можешь её изменить, а другие данные не успеть, или наоборот. И если она большая, то ты можешь не успеть её изменить до полностью. Добавлено через 45 секунд Добавлено через 1 минуту proleha, указателем должен быть параметр функции потока.
1
|
|||
|
6 / 6 / 1
Регистрация: 01.06.2012
Сообщений: 107
|
||
| 06.06.2012, 11:51 [ТС] | ||
0
|
||
| 06.06.2012, 11:51 | |
|
Помогаю со студенческими работами здесь
20
Обращение к контролу из потока
Обращение к контролу из потока Обращение к ListView из потока Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|