Mỗi lần tôi chạy dự án của mình trong Qt Creator, nó quay một phiên bản khác của ứng dụng của tôi. Tôi phải tự bỏ các ứng dụng hoặc người nào khác Dock của tôi được đầy đủ khá nhanh. Thật là một nỗi đau. Có cách nào để giái quyết vấn đề này không? Nó sẽ có ý nghĩa hơn rất nhiều nếu khi tôi chạy lại ứng dụng, tôi chỉ có thể chấm dứt phiên bản đã chạy. Điều này có thể được thực hiện?Qt Creator: Thoát phiên bản trước của ứng dụng trước khi chạy lại?
Trả lời
bạn có thể sử dụng shared memory để khắc phục sự cố của mình. Tôi đã sử dụng cách tiếp cận này để không bắt đầu một thể hiện khác của chương trình của tôi trong khi đã có một cá thể đang chạy. Trên thực tế tôi đã thực hiện điều này để đạt được cái gọi là ứng dụng ví dụ đơn lẻ.
Tuy nhiên trường hợp của bạn hơi khác một chút so với tôi, bạn cần bằng cách nào đó gửi tín hiệu từ ứng dụng thứ 2 đến ứng dụng đầu tiên để đóng nó. Tôi nghĩ bạn có thể đạt được hành vi này vẫn đang sử dụng QSharedMemory
.
Những gì tôi đã làm để đạt được ứng dụng cá thể đơn là tạo bộ nhớ dùng chung với id duy nhất (UUID) làm khóa và mỗi lần chương trình của tôi bắt đầu đặt khóa trên đó, vì vậy nếu chương trình đã bị khóa hiểu rằng đã có một cá thể đang chạy và đóng tự động.
Bạn cần cải thiện việc triển khai này để điều chỉnh yêu cầu của mình. Về lý thuyết những gì bạn cần làm là đặt một con trỏ hàm (hoặc tín hiệu qt) vào bộ nhớ chia sẻ và khi một cá thể khác xuất hiện, hãy làm cho hàm thứ hai của bạn kích hoạt chức năng nào đó để thoát khỏi thể hiện đầu tiên. Đáng tiếc là tôi không biết làm thế nào để thực hiện điều này nhưng tôi hy vọng điều này sẽ cung cấp cho bạn một ý kiến ...
Dòng chảy nên được phần nào thích sau:
IN MAIN
check if shared memory in use
if yes
fire the exit function via shared memory to close 1st app
if no
put the function pointer which will close the app when another instance come up
do stuff
Để cung cấp cho bạn một gợi ý nhỏ, mã của tôi ví dụ duy nhất là như sau
QSharedMemory shared(AppConstants::UUID); //Global variable
int main(){
// Ensure single instanse of App
if(!shared.create(512, QSharedMemory::ReadWrite))
{
// QMessageBox msgBox;
QMessageBox::critical(0, QObject::tr("App is already running!"), QObject::tr("App is already running!"), QMessageBox::Ok, QMessageBox::Ok);
qCritical() << "Cevirgec is already running!";
exit(0);
}
else {
qDebug() << "App staring...";
}
}
chúc may mắn và đừng quên chia sẻ giải pháp của bạn đây;)
EDIT:
Nếu đặt con trỏ hàm hoặc tín hiệu Qt và sau đó kích hoạt không thể (tôi hy vọng không) bạn có thể đặt biến cho bộ nhớ dùng chung để cho phép giữ số lượng phiên bản đang chạy và ứng dụng của bạn theo định kỳ (trong chuỗi) kiểm tra nó và nếu nó lớn hơn 1 đóng ứng dụng.
Xem ra các điều kiện chủng tộc tại đây! Bạn có thể tránh các điều kiện chủng tộc bằng cách đặt một cặp số ngẫu nhiên được tạo bởi mỗi cá thể và thời gian bắt đầu. vì vậy trước khi đóng, ứng dụng của bạn đảm bảo rằng đó là ứng dụng cũ hơn. Ví dụ: QPair<int, QDateTime>
Chúa Giêsu Kitô. Tôi đã chỉ hy vọng tôi sẽ bỏ lỡ một thiết lập trong Qt Creator. Đây là điên rồ. Cảm ơn cho giải pháp của bạn mặc dù, nó thực sự dường như là cách tốt nhất để làm điều đó. Nhưng con người, điều này phản ánh kém trên Qt Creator. – jbrennan
tốt, những gì bạn muốn là quá thấp để mong đợi QTCreator để xử lý nó: ( – destan
Hmm, tôi figured Qt Creator sẽ xử lý nó. Xcode thực hiện điều này tự động. – jbrennan
- 1. svn: quay trở lại phiên bản trước
- 2. Qt Creator: Chạy trong Terminal
- 3. Cách lưu các tùy chọn ứng dụng trước khi thoát? .
- 4. qt creator debug slow
- 5. Quay lại phiên bản trước đó trong Fluent Migrator
- 6. Cách kiểm tra phiên bản JRE trước khi ra mắt?
- 7. Qt Creator không thể tìm thấy bất kỳ phiên bản Qt hợp lệ nào
- 8. Đóng ứng dụng Java trước mỗi lần chạy trong Eclipse
- 9. Chuỗi Qt không dừng lại sau khi gọi thoát/thoát
- 10. Cách quay lại phiên bản trước trong git
- 11. Tải xuống ứng dụng cửa hàng ứng dụng phiên bản trước đó của ứng dụng thay vì mới nhất
- 12. xác nhận trước khi thoát hộp thoại
- 13. Phiên bản chỉ kết thúc trước của Init hook?
- 14. Android: Theme Holo phiên bản trước
- 15. Tải trước và chạy jQuery/javascript trước khi xem trang
- 16. Cách xóa các phiên bản trước của Xcode
- 17. Có thể xem trước trang thị trường ứng dụng trước khi xuất bản không?
- 18. Qt 4.8.3 Ứng dụng GUI trên Linux trông cũ và không khớp với bản xem trước thiết kế
- 19. tải một mô hình phiên bản trước
- 20. cách chạy đoạn mã ngay trước khi thoát tập lệnh perl
- 21. Bootstrapper: Kiểm tra xem msi phiên bản được cài đặt trước khi chạy
- 22. Tại sao gọi quit() trước khi exec() không thoát khỏi ứng dụng?
- 23. Làm thế nào để đảm bảo một đoạn mã được chạy trước khi thoát khỏi ứng dụng java
- 24. Cài đặt các phiên bản trước của R trên ubuntu
- 25. Ứng dụng Qt hủy sự kiện thoát
- 26. Tải lại dữ liệu ứng dụng khi ứng dụng đi vào nền trước?
- 27. Qt Creator trong Emacs keybind
- 28. Qt. Tự động thêm phiên bản dành cho ứng dụng
- 29. apache: xác thực cơ bản trước khi viết lại
- 30. Trước khi ký ứng dụng mac và tải ứng dụng lên cửa hàng ứng dụng
Bản sao có thể có của [Bạn có thể định cấu hình Trình tạo Qt để giết ứng dụng đang chạy trước khi xây dựng hoặc chạy không?] (Http://stackoverflow.com/questions/14964093/can-you-configure-qt-creator-to -kill-the-running-application-before-building-hoặc) – bpierre