Benish |
Отправлено: 08.10.2004, 16:24 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 67
|
Описаны 2 глобальные переменные:
volatile bool tTst=false, tBadp=false;
в остальных файлах они описаны как:
volatile extern bool tTst, tBadp;
Если изменять их значение при обявлении, то в потоках эти изменения
видны. Если изменять их значения из программы, изменения видны в отладчике, но в потоках ветки которые должны отрабатывать при значениях true — не отрабатывают. При объявлении через класс — все работает. Но хочется работать без указателей.
Может я что-то не так делаю? |
|
timson |
Отправлено: 08.10.2004, 17:32 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 82
|
а попрбуй без volatile. че-та это фича мне не нравится...
|
|
Георгий |
Отправлено: 08.10.2004, 18:19 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
да не — без volatile будет глючить, например вот такое:
быть может случайно оказалось, что главный поток и дополнительные работают с разными копиями переменной — её экземпляр точно объявлен в одном месте? |
|
Guest |
Отправлено: 11.10.2004, 10:18 |
|
Не зарегистрирован
|
Похоже что объявлен, но вот как — понятия не имею.
Вот что у меня написано:
Umain.h
CODE |
volatile bool tTst=false, tBadp=false; |
Uthread.h
CODE |
#include "Umain.h"
extern volatile bool tTst, tBadp; |
Uthproc.h
CODE |
#include "Umain.h"
extern volatile bool tTst, tBadp; |
Uthwrite.h
CODE |
#include <Umain.h>
extern volatile bool tTst, tBadp; |
С помощью поиска проверил, больше нигде объявлений — нет.
НО!! При компиляции есть такие варнинги:
CODE |
[Linker Warning] Public symbol '_tTst' defined in both module UMAIN.OBJ and UTHREAD.OBJ
[Linker Warning] Public symbol '_tTst' defined in both module UMAIN.OBJ and UTHPROC.OBJ
[Linker Warning] Public symbol '_tBadp' defined in both module UMAIN.OBJ and UTHREAD.OBJ
[Linker Warning] Public symbol '_tBadp' defined in both module UMAIN.OBJ and UTHPROC.OBJ
[Linker Warning] Public symbol '_tTst' defined in both module UTHREAD.OBJ and UTHPROC.OBJ
[Linker Warning] Public symbol '_tBadp' defined in both module UTHREAD.OBJ and UTHPROC.OBJ
|
Причем, что интересно, обратите внимание, что в варнингах не упоминается модуль Uthwrite.h и самое главное, что в этом модуле глобальная переменная отрабатывает нормально!!!! Копирование строк extern из модуля Uthwrite.h в остальные ничего не дает
Вообщем ничего не понятно |
|
Benish |
Отправлено: 11.10.2004, 11:22 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 67
|
Все! Разобрался!
Я с #include напортачил. Привел во всех юнитах #include в порядок и все стало ОК. Ура!
Но все равно СПАСИБО всем. |
|
Георгий |
Отправлено: 11.10.2004, 11:43 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
жуть.
я б экземпляр переменной объявил не в hpp файле, а в cpp, а в hpp таскал бы только extern обявление.
|
|
Guest |
Отправлено: 12.10.2004, 11:36 |
|
Не зарегистрирован
|
Ага. Я приблизительно так и передалал. |
|