Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: передача локальной переменной через сигнал
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
mezmay
Есть 2 потока. Из одного в другой надо передать массив, являющийся локальной переменной. Мне кажется что с помощью сигналов и слотов этого делать нельзя, т.к. этот массив на момент приема слотом может уже уничтожиться (т.к. между потоками связь не прямая а через события). Короче получается что указатели и ссылки на локальные переменные передавать нельзя? Только по значению получается передавать?
Litkevich Yuriy
Цитата(mezmay @ 11.7.2011, 20:15) *
указатели и ссылки на локальные переменные передавать нельзя?
нельзя, но не только между потоками.
Цитата(mezmay @ 11.7.2011, 20:15) *
Только по значению получается передавать?
можно создать объект динамически (new), и передать указатель на него.
mezmay
Цитата(Litkevich Yuriy @ 11.7.2011, 18:05) *
Цитата(mezmay @ 11.7.2011, 20:15) *
указатели и ссылки на локальные переменные передавать нельзя?
нельзя, но не только между потоками.

а это почему?
Litkevich Yuriy
Цитата(mezmay @ 12.7.2011, 1:41) *
а это почему?
потому-что переменная умрёт, по выходу из локальной области видимости.
mezmay
но в функцию то можно передавать указатели на локальные переменные, выход из области видимости то после функции где-то произойдет. А соединение сигнал-слот в одном потоке вроде эквивалетно прямому вызову
sidsukana
struct massiv
{
    int a[2];
};

...

void foo()
{
    massiv m;
    m.a[0] = 123;
    m.a[1] = 456;
}


Ну а там как хотите так и передавайте ваш массив.
Алексей1153
sidsukana, лучше контейнер, чем такие опасные конструкции
ufna
Цитата(mezmay @ 15.7.2011, 23:03) *
А соединение сигнал-слот в одном потоке вроде эквивалетно прямому вызову


Нет, если DirectConnection не задано (по-умолчанию - QeuedConnection).
mezmay
Из асистента:
Qt::AutoConnection - (default) Same as DirectConnection, if the emitter and receiver are in the same thread. Same as QueuedConnection, if the emitter and receiver are in different threads.
Litkevich Yuriy
Цитата(mezmay @ 16.7.2011, 1:03) *
но в функцию то можно передавать указатели на локальные переменные, выход из области видимости то после функции где-то произойдет. А соединение сигнал-слот в одном потоке вроде эквивалетно прямому вызову
Сегодня ты об этом помнишь в своём слоте, а завтра нет. А если слот чужой, сторонней библиотеки? Вобщем лучше поостеречся.
когда происходит передача по значению тогда точно можно спать спокойно. Если же по указателю, то лучше уже динамически объект создать.

Цитата(ufna @ 16.7.2011, 16:47) *
по-умолчанию - QeuedConnection
Авто.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.