![]() |
|
Модераторы: bsa |
![]()
|
|
| dahilu |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 9.9.2010 Репутация: нет Всего: нет |
Main.h
Main.cpp
MyTHRD.h
MyTHRD.cpp
Компилируется но выводит в Label1 0 выдает предупреждение что она объявлена в двух модулях: Public symbol '_VarA' defined in both module C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\TESTTHREAD\MAIN.OBJ and C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\TESTTHREAD\MYTHRD.OBJ Как убрать ошибку и как тогда обратится к VarA и OutputVarA(); из потока? Почему если #include "MyTHRD.h" и MyTHRD *MyT; сделать в Main.h будет выдаваться ошибка [C++ Error] Main.h(24): E2141 Declaration syntax error? |
||||||||
|
|||||||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
1) В h-никах делают только объявление, а описание делают в cpp-шниках. Перенеси int VarA; в main.cpp, а в main.h сделай extern int VarA; (и в MyTHRD.h он уже не нужен.
2) К VCL-ным компонентам запрещено обращаться из доп.потоков, а ты это делаешь для этого существует метод TThread::Synchronize() 3) (не в обиду) Рановато тебе заниматься потоками, если не умеешь объявлять и описывать переменные... ИМХО, ессно -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| dahilu |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 9.9.2010 Репутация: нет Всего: нет |
Спасибо за ответ, я попробовал, все заработало. но у меня все равно есть вопросы: Почему я должен переносить объявление переменной VarA в Main.cpp? Разве объявления в Main.h некорректно? Из книги архангельского (стр 52 1 абзац) я понял что спецификацию extrern надо писать в модуле куда подключаю, в данном случае, Main.h, или это с потоками не работает?или я не правильно понял когда надо использовать extern? Это сообщение отредактировал(а) dahilu - 22.8.2012, 12:54 |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
нет. если в h-нике описать переменную, то, инклюдая этот h-ник в 2 разных cpp-шника ( в твоём случае Main.cpp и MyTHRD.cpp ), ты получаешь описание двух переменных с одним и тем же именем. Вот он и ругается. и ещё. ты учёл
? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| dahilu |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 9.9.2010 Репутация: нет Всего: нет |
Да учел. единственное есть вопрос, наверно из-за недопонимания как работает Syncronize(): Например есть вот такой поток
В ThreadFunc() выполняются много действий и в середине я обращаюсь к компоненту формы. мне достаточно написать Synchronize(ThreadFunc1) или мне надо написать отдельную функию ThreadSubFunc() в которой будет одно действие (обращение к форме) и тогда уже в ThreadFunc() писать Synchronize(ThreadSubFunc) ? Это сообщение отредактировал(а) dahilu - 24.8.2012, 09:43 |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
А чем ThreadFunc1 отличается от ThreadSubFunc ?
В любом случае тебе потребуется доп.функция для обращения к форме, которую нужно будет вызывать через Синхронайз -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
Аааа... наверное ТС опечатался. Единица после имени функции лишняя ?
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |