Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Просто Ромашка
1 / 1 / 1
Регистрация: 08.11.2014
Сообщений: 23
Завершенные тесты: 1
#1

Tthread доступ к переменным - C++ Builder

29.03.2017, 09:57. Просмотров 194. Ответов 8
Метки нет (Все метки)

Здравствуйте, подскажите, пожалуйста, как использовать объявленную в потоке переменную в другом модуле?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2017, 09:57
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Tthread доступ к переменным (C++ Builder):

TThread, TThread, TThread .......... %)
помогите, если не затруднит как можно динамически создать поток и передать...

Потоки(TThread)
Здраствуйте. У меня возникла следующая проблема, начал изучать потоки,когда...

TThread и ShowMessage
Пискал ответ на проблему в гугле - вижу, что проблема довольно масштабная, т.к....

Клас TThread
Нужно написать програму для реализации потоков через клас TThread. Когда я...

Не работает Synchronize в TThread
Доброго времени суток! .h class TMyThread : public TThread { private:...

TThread и копирование файлов
Добрый день спецы. Пишу достаточно сложную программу, точнее оптимизирую то,...

8
Dinkin
646 / 444 / 116
Регистрация: 31.05.2013
Сообщений: 2,270
Записей в блоге: 2
29.03.2017, 10:12 #2
Доброго.
Объявить перемененную в паблике потока.
0
Просто Ромашка
1 / 1 / 1
Регистрация: 08.11.2014
Сообщений: 23
Завершенные тесты: 1
29.03.2017, 10:23  [ТС] #3
Объявляю, пытаюсь обратиться - получаю ошибку
[BCC32 Error] Unit4.cpp(42): E2451 Undefined symbol 'pFunc_LoadText'

когда объявляю переменную глобально в потоке, а в модуле использую extern работает не корректно, складывается впечатление, что в переменную ничего не записывается
0
Dinkin
646 / 444 / 116
Регистрация: 31.05.2013
Сообщений: 2,270
Записей в блоге: 2
29.03.2017, 10:26 #4
Как создаете поток?
Видят ли обоюдно поток и форма друг друга через форму alt+f11?
Зачем глобально, объявите в паблике ее.
1
Evg
Эксперт CАвтор FAQ
18938 / 6899 / 513
Регистрация: 30.03.2009
Сообщений: 19,437
Записей в блоге: 30
29.03.2017, 10:35 #5
Цитата Сообщение от Просто Ромашка Посмотреть сообщение
объявленную в потоке переменную
Цитата Сообщение от Просто Ромашка Посмотреть сообщение
когда объявляю переменную глобально в потоке
Переменные объявляются не в потоке, а в файле с исходниками. Лучше покажи исходник, потому что своими словами ты объясняешь неправильно
1
Просто Ромашка
1 / 1 / 1
Регистрация: 08.11.2014
Сообщений: 23
Завершенные тесты: 1
29.03.2017, 10:52  [ТС] #6
Я поняла, спасибо
объясняю не правильно в силу некомпетентности)
посоветуете литературу?
0
Dinkin
646 / 444 / 116
Регистрация: 31.05.2013
Сообщений: 2,270
Записей в блоге: 2
29.03.2017, 11:01 #7
Код покажите как создаете поток?
0
Просто Ромашка
1 / 1 / 1
Регистрация: 08.11.2014
Сообщений: 23
Завершенные тесты: 1
29.03.2017, 11:17  [ТС] #8
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
void __fastcall TMyThread::Execute()
{
    //---- Place thread code here ----
 
    Form1->hLibHandle = LoadLibrary("SynAn_IAI.dll"); // подключаем библиотеку
    memset(Form1->buffer,0,2000); // очищаем буфер
    GetCurrentDirectory(sizeof(Form1->buffer),Form1->buffer);// узнаем текущую дерикторию
 
    if ( Form1->hLibHandle )
     {
      // Пытаемся инициализировать библиотеку
 
        Form1->pFunc = (pfivFunc_ch)GetProcAddress(Form1->hLibHandle,"InitLib");
       if ( Form1->pFunc )
       {
       if( (*pFunc)(Form1->buffer)==0)
       Form1->StatusBar1->Panels->Items[0]->Text = "Загрузили";
 
       }
 
 
       ////  загружаем функцию загрузки текста
       //pfivFunc_ch
        Form1->pFunc_LoadText = (pfivFunc_ch)GetProcAddress(Form1->hLibHandle,"LoadText");
 
       ////
      // pfivFunc_void
      Form1-> pFunc_GrantMa = (pfivFunc_void)GetProcAddress(Form1->hLibHandle,"GrantMa");
 
       ////
      // pfivFunc_ch
       Form1->pFunc_SaveTxtBin = (pfivFunc_ch)GetProcAddress(Form1->hLibHandle,"SaveTxtBin");
 
     }
   }
теперь проблема в этой строке
C++
1
if( (*pFunc)(Form1->buffer)==0)
попробовала
C++
1
if( Form1->(*pFunc)(Form1->buffer)==0)
и
C++
1
if( Form1.(*pFunc)(Form1->buffer)==0)
не работает

Добавлено через 7 минут
а если написать вот так
C++
1
 Form1->pFunc
будет ли тот эффект который нужен...
0
Dinkin
646 / 444 / 116
Регистрация: 31.05.2013
Сообщений: 2,270
Записей в блоге: 2
29.03.2017, 11:41 #9
Просто Ромашка, такое дело...с потоками так не работают. Все функции с главной формой должны быть через синхронизацию.
0
29.03.2017, 11:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2017, 11:41
Привет! Вот еще темы с решениями:

TThread,Terminate() и Terminated
Как можно проверить остановлен ли поток и как остановить поток в версиях...

Несколько модулей TThread
Доброго времени суток! Подскажите, допускается ли создание несколько модулей...

Дождаться завершения потока TThread
Есть поток TThread под названием autoupdate и я зщ как после его вызова...

Потоки, TThread, нет синхронизации
Доброго дня, товарищи программисты. Проблемка тут у меня с потоком. Я создаю...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru