Golodnyi
что я делаю не так?
Anonymous
Вывод происходит еще до изменения может?
Golodnyi
ну там же отдельный поток, while и слип
Golodnyi
он выводит каждую секунду, по всему жизненному циклу программы
Anonymous
ну и пох
>ну там же отдельный поток, while и слип
Golodnyi
Anonymous
это было до предыдущего твоего сообщения
Golodnyi
я вывожу temp_vector->size() в конце функции flex и он выводит 39, после этого temp_vector->size() выводится в draw и показывает 0
Valery
оставлю здесь
https://cpp-school.unigine.com/
Anonymous
во flex сделай кон где
Golodnyi
Anonymous
константный указатель, может меняешь его где
Anonymous
Golodnyi
flex: 0x7f876a5fb1e8
draw: 0x7f8769dfbd88
хм....
Anonymous
std::vector *const tmp
Anonymous
...vector<char>
Golodnyi
я не могу на старте установить размер
Golodnyi
я требуеый размер получаю только в процессе работы программы
Anonymous
делай конст - компилятор еррор кинет
Anonymous
Anonymous
и размер вектора к указателю не имеет отношения
Golodnyi
ну мне компилятор говорит что должен быть инициализирован константный вектор
Anonymous
const* а не *const
Golodnyi
ошибка: missing template arguments before «const»
std::vector const* temp_vector;
Anonymous
std::vector<CHAR>
Anonymous
тебе auto не завезли?
Golodnyi
Хз о чем ты
Anonymous
auto n = 1; // n is int
Anonymous
у нас еще std::any есть - плюсы почти как твой питон
Golodnyi
мой питон?) Окэй)
Golodnyi
я внутри функций потока тоже должен константно описывать или достаточно только в инициализации в main?
Anonymous
только во flex
Golodnyi
почему так?
Anonymous
чтобы не получилось как сейчас у тебя
Anonymous
что за функция потока?
Anonymous
давай навангую - в условии, за место сравнения, у тебя присваивание
Golodnyi
че...какое сравнение)
Golodnyi
ты думаешь я из тех кто дает какой то выбор программам? Как скзаал, так и будет, никаких if'ов)
Golodnyi
щя через минуту сформулирую мысль, что ничего не работает и надо чуть глубже углубиться в код
Golodnyi
если объявить переменную обычным образом, а в flex через константу, с ссылкой на исходную, то я не могу никакие методы дергать у вектора
Anonymous
а про ифы речи и небыло
Golodnyi
ну и в целом это как то не логично, менять тип на констатный во flex
Anonymous
в циклах тоже условия бывают
Anonymous
std::vector<char> *const tmp
это константный указатель на вектор - не константый вектор
Anonymous
можно дергать не const методы
Anonymous
но зато такому указателю нельзя присвоить новый адрес
Anonymous
а вообще тут есть супапро
Anonymous
но тебе надо в ультромегапро
https://t.me/joinchat/AAAAAEH2f4R62LrebHWd7g
Anonymous
но там народу мало
Golodnyi
тоесть внутри каждого потока я должен константный указатель на вектор делать?
Golodnyi
просто если я внутри потока делаю константный указатель, то ловлю такое
ошибка: passing «const std::vector<char>» as «this» argument discards qualifiers [-fpermissive]
temp_vector->clear();
Anonymous
void flex(void* arg) {
auto tmp_vector = (std::vector<char> *const)arg;
. . .
}
Golodnyi
ошибка: нет декларации «temp_vector» в этой области видимости
Anonymous
const * и * const это разные типы
Anonymous
Golodnyi
ой ссори)
Anonymous
блять, нет
Anonymous
без auto пиши
Anonymous
std::vector<char> *const temp_vector = . . .
Golodnyi
flex size: 31
flex address: 0x7fb4e0d7d1e8
draw size: 0
draw address: 0x7fb4dbffed88
во флекс и драв объявил
vector<char> *const temp_vector = (vector<char> *const)arg;
Golodnyi
vector<char> *const temp_vector = (vector<char> *)arg;
так тоже разные адреса
Anonymous
return смотри у них значит
Golodnyi
какой еще ретурн, я по ссылке передаю
vector<char> temp_vector;
pthread_t thread;
int result = pthread_create(&thread, NULL, flex, &temp_vector);
Anonymous
указатель не ссылка, а return у flex и draw смотри
Golodnyi
flex и draw функции void *
Golodnyi
у них return нельзя же...
Golodnyi
а или void * в сях значит что возвращает ссылку, без привязки к типу?
Golodnyi
фишка в том как бы, что flex это по сути сокет сервер, там вечный цикл, который принимает соединения, я там return даже не могу использовать, чтоб не оборвать сокет
Anonymous
не ссылку, а указатель
Golodnyi
задумка изначально была, чтоб я давал flex область памяти, он писал туда инфу и в любом другом месте я мог бы по этой области памяти получать то, что flex туда записал
Anonymous
ты распечатываешь адреса, что ты отправляешь в вывод?
Anonymous
кидай код куда-нибудь
Golodnyi
не очень понял вопроса, но vector это массив с данными из сокета, мне надо в другом потоке отрисовать эти данные в таблице
Golodnyi
грубо говоря у меня так, есть main.cpp который создает vector<char> temp_vector;
создаю 2 потока
int result = pthread_create(&thread, NULL, flex, &temp_vector);
if (result != 0) {
perror("Создание первого потока!");
return EXIT_FAILURE;
}
pthread_t thread2;
int result2 = pthread_create(&thread2, NULL, draw, &temp_vector);
if (result2 != 0) {
perror("Создание второго потока!");
return EXIT_FAILURE;
}
передаю туда &temp_vector, хочу чтоб поток с функцией flex писал в temp_vector и эти значения я мог иметь в main.cpp, соответственно функция draw чтоб тоже получала доступ к temp_vector и могла отрисовать его содержимое
Golodnyi
я могу дать код, но там много мусора по реализации протокола будет, вся суть как бы в предыдущем сообщении
Golodnyi
функции flex и draw вообще не имеют return в себе
Golodnyi
суть же понятна задумки? чтоб 2 потока работали с одной областью памяти, как этого добиться?
Anonymous