Я столкнулся с проблемой в C, где я пытаюсь использовать некоторые getter и setter для обмена переменной между несколькими исходными файлами.Getter & Setter in C
Я объявляю здесь свою переменную (ok_button) с геттер и сеттер:
variable.c
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include "../libhd_src/libhd.h"
int ok_button;
void set_ok_button(int value){
ok_button=value;
printf("Setting ok");
}
int get_ok_button(){
return ok_button;
}
Здесь, когда я нажать на кнопку, она устанавливает переменную 1. (Can Не загружайте полный код этого исходного файла, но я вижу в своих журналах, что функция set_ok_button правильно выполняется, когда я нажимаю (я вижу печать «Настройка ОК» каждый раз, когда я нажимаю свою кнопку)
button.c
#include "../libhd_src/libhd.h"
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <math.h>
#include <time.h>
void * button_back_center_short(void *arg){
set_ok_button(1);
return 0;
}
И здесь я просто проверяю значение моей переменной с помощью функции getter.
read.c
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <math.h>
#include <time.h>
#include "../../libhd_src/libhd.h"
int main(int argc, char **argv){
while(1){
printf("Value %d", get_ok_button());
usleep(500000);
}
}
Проблема заключается в том, что значение, отображаемое в read.c всегда «0», даже когда я прижимаюсь кнопку и установите значение 1 ...
ли кто-то понимает, что не так? Не стесняйтесь сказать мне, если вы видите лучшее решение для этого:
Это похоже на неправильный способ сделать это. Что такое содержимое * libhd.h *? Вы не должны использовать глобальные переменные для такого рода вещей. –
Где вы меняете стоимость? (установлено в 0) –
Поскольку ваш 'main()' никогда не пишет в 'ok_button', я предполагаю, что модификации, которые * * * выполнены, являются асинхронными (в обработчике сигналов или аппаратным обеспечением). В этом случае 'ok_button' должен быть * как минимум *' volatile', возможно, 'volatile sig_atomic_t' или без блокировки атома. – EOF