Tôi đang viết một chương trình trong Qt, chạy 10 chuỗi công việc tính toán quỹ đạo của một đối tượng trong không gian. Họ cũng phải vẽ đường đi của vật thể. Tôi có một lớp "Body" bắt nguồn từ QGraphicsEllipseItem và nó có một QPainterPath trong đó. Lớp "Mô phỏng" có danh sách các chướng ngại vật trên thế giới, và cơ thể mô phỏng và chạy cho đến khi cơ thể va chạm với thứ gì đó. Mô phỏng chạy trong một luồng riêng biệt (được thực hiện với moveToThread, không phải bởi phân lớp QThread). Khi cơ thể va chạm, Mô phỏng phát ra một tín hiệu nói rằng nó kết thúc. Khi tất cả các chủ đề đã hoàn thành tôi muốn vẽ các đường dẫn (tôi làm điều đó bằng cách gọi một phương thức trong "Body" cho phép vẽ đường dẫn trong phương thức vẽ của nó).Vẽ từ nhiều chủ đề trong Qt
Đáng tiếc là tôi nhận được khẳng định lỗi:
ASSERT: "!unindexedItems.contains(item)" in file graphicsview\qgraphicsscenebsptreeindex.cpp, line 364
Họ xảy ra dường như ngẫu nhiên. Tôi đã thử các loại kết nối khác nhau, không có kết quả.
Tôi đang bắt đầu chuỗi trong một vòng lặp.
Tôi đang sử dụng Qt 5.0
"Lý tưởng nhất là không phải là đối tượng Qt, mặc dù có thể sử dụng một số lớp Qt nhất định nếu bạn rất cẩn thận"? Có một số lượng lớn các lớp có thể được sử dụng bên ngoài luồng GUI ...Nó sẽ là thú vị để có số, nhưng tôi sẽ nói rằng chỉ một phần nhỏ của Qt không được sử dụng bên ngoài thread GUI. –
@LucaCarlon Quan điểm của tôi là nếu bạn sử dụng các lớp Qt, bạn cần xác minh rằng chúng an toàn để sử dụng, trong khi nếu bạn sử dụng một lớp không Qt, bạn có thể đảm bảo rằng nó sẽ không có bất kỳ tương tác với luồng GUI Qt. –
Một số nguyên tắc cho Qt và đa luồng có tại đây: http://www.informit.com/articles/article.aspx?p=1405551&seqNum=4 –