Название: обмен данными между потоками Отправлено: ilyagoo от Декабрь 10, 2008, 11:37 в главном gui потоке создаются n потоков. каждый из них получает массивы данных. как эти данные вытащить?
судя по всему, передача указателя не сработает, т.к. массив будет находиться в другой нити. Название: Re: обмен данными между потоками Отправлено: pastor от Декабрь 10, 2008, 11:56 судя по всему, передача указателя не сработает, т.к. массив будет находиться в другой нити. сработает, только нужно позаботится синхронизации потоков. Посомтрите Thread Support in Qt (http://doc.trolltech.com/4.4/threads.html) Другой вариант воспользоваться qtsharedmemory (http://doc.trolltech.com/solutions/4/qtsharedmemory/) из Qt Solutions Название: Re: обмен данными между потоками Отправлено: Tonal от Декабрь 11, 2008, 09:06 qtsharedmemory то зачем? Оно для коммуникации между процессами.
Потоки разделяют все данные, так что кроме синхронизации тут ничего не нужно. :) Название: Re: обмен данными между потоками Отправлено: pastor от Декабрь 11, 2008, 13:27 Оно для коммуникации между процессами. Нетолько, можно использовать и между потоками (http://doc.trolltech.com/solutions/4/qtsharedmemory/threadcounter.html). Название: Re: обмен данными между потоками Отправлено: Tonal от Декабрь 11, 2008, 14:58 Если можно подождать с обработкой до тех пор, пока все данные не приедут, я бы делал так:
1. распределял новый блок данных в слушающем потоке и ждал данных; 2. забивал его данными; 3. когда данные кончились выбрасывал сигнал с указателем на блок; 4. Переходил в п1 А если обработку нужно начинать сразу использовал бы какой-нибудь тип очереди с блокировками. Если данные поступают быстрее чем обрабатываются, то так можно получить выигрыш по сравнению с единственным буфером. :) |