1. Работать не будет, читайте ман (нужна петля обработки событий)
блина... читаю... ток голова пухнет! и что - то не могу понять!
2. не обрабатывается команда завершения потока, возможно нарушение приоритетов (starvation)
это я опустил дабы не загромождать код
3. А зачем?
ну, чтобы поток В прислал потоку А указатель на данные типа *int , т.к поток А тогда по этому указателю вычитает данные быстрее нежели из переменной ... типа для скорости
> про защиту данных QList от потокобезопасности
каково, а? )
да блина главное смысл понятен о чем я!
тоже неплохо...
что имеете ввиду?
в целом идея неверная. мб для отдельно взятого случая подобным образом будет и проще, но бесконечный emit sgReadData(j) - это что-то уже за гранью.
ну мне нужно из подсистемы В в подсистему А бесконечно слать некие данные... в принципе я мог бы в бесконечном цикле потока А вызывать некую ф-ю типа B::readData(int i, int data) , предварительно объявив и реализовав ее в подсистеме В... но при этом придется включать #include "В.h" ...
И вообще, в ассистенте написано, что сигналы и слоты для того еще введены, чтобы можно было стыковать объекты м/у собой, которые ничего не знают друг о друге
(вот я и стыканул)
как я понял из кода выше, списки в обоих тредах должны синхронизироваться (из В в А) - не проще ли использовать что-то вроде QSharedMemory?
ну, или хотя бы посмотри QWaitCondition
нет, вы наверное неправильно поняли.... это я просто списки сюда всунул ... а реально дело так должно быть (в моем идеале
)
1. поток А шлет потоку В сигнал о том, что он хочет из внутреннего хранилища (которое находится в подсистеме В) из "ячейки" с идентификатором ID = 333 получить данные (реально данные могут быть любыми, но в примере это int) : sgReadData(333);
2. поток В принимает этот сигнал и у себя запускает слот slReadData(333);
3. в этом слоте происходит "декодирование" числа 333 (например им закодирован некий путь к объекту внутри подсистемы В в котором хранятся данные)
4. после раскодирования - в слоте происходит чтение этих данных из этого объекта и пусть прочитали число = 999;
5. после того как прочитали - в слоте класса В выдаем сигнал для подсистемы А типа по ссылке ID=333 прочитали данные 999 : sgDataReady(333,999)
6. подсистема А приняв этот сигнал, запускает слот slUpdateData(333, 999) и записывает эти данные 999 в свое внутреннее некое хранилище данных , у которого свои идентификаторы
т.е листы - это просто типа массивов каких-то данных (в принципе я массивы мог бы всунуть)
вот как мне нужно сделать!!!
типа приложение состоять должно из нескольких подсистем А, В, С .. и т.п .. которые должны работать в своих потоках и общаться между собой (передавать/принимать данные) желательно только с помошью сигналов и слотов, раз уж придумали тролли этот механизм!
фухх..