मैं क्यूटी का उपयोग कर रहा हूं और thisलिनक्स (उबंटू) में समाधान लागू करके एक एकल इंस्टेंस एप्लिकेशन प्राप्त करने का प्रयास कर रहा हूं। समस्या यह है कि यदि एप्लिकेशन अप्रत्याशित रूप से खत्म हो जाता है (seg। गलती या उपयोगकर्ता इसे मारता है) साझा स्मृति संलग्न रहती है और कोई अन्य प्रक्रिया इसे फिर से बना सकती है। QSharedMemory दस्तावेज़ से याद रखें:सी ++ साझा स्मृति रिसाव, साझा स्मृति को कैसे साफ़ करें?
यूनिक्स: QSharedMemory साझा स्मृति खंड "का मालिक है"। जब धागा या प्रक्रिया जिसमें से जुड़े QSharedMemory का उदाहरण है, विशेष साझा मेमोरी सेगमेंट से सेगमेंट से अलग हो जाता है, तो QSharedMemory के उदाहरण को नष्ट कर देता है, यूनिक्स कर्नेल साझा मेमोरी सेगमेंट जारी करता है। लेकिन अगर वह अंतिम धागा या प्रक्रिया को QSharedMemory विनाशक चलाने के बिना दुर्घटनाग्रस्त हो जाती है, तो साझा स्मृति सेगमेंट क्रैश से बचता है।
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// Ensure single instanse of Cevirgec application
QSharedMemory shared(ApplicationConstants::
if(!shared.create(512, QSharedMemory::ReadWrite))
{
// QMessageBox msgBox;
QMessageBox::critical(0, QObject::tr("application is already running!"), QObject::tr("application is already running!"), QMessageBox::Ok, QMessageBox::Ok);
qCritical() << "application is already running!";
exit(0);
}
else {
qDebug() << "application staring...";
}
return a.exec();
}
क्या समाधान आप यहाँ का सुझाव कर सकते हैं? अंततः प्रक्रिया समाप्त होने के बाद मैं कैसे आश्वस्त कर सकता हूं कि साझा स्मृति साफ़ हो जाती है (या आमतौर पर जो भी क्रिया का उपयोग किया जाता है)। में (समाधान)
मैं QSharedMemory का उपयोग करने और पकड़ने SIGSEGV संकेत तो sharedMemory.detach फोन द्वारा वांछित व्यवहार हासिल किया():/
संपादित करें: मैं सभी मुख्य कार्य के आसपास जावा में finally
की तरह कुछ की जरूरत है सिग्नल हैंडलर।
शायद आपको ऐसा ऐप बनाने की कोशिश नहीं करनी चाहिए जो ओएस और उपयोगकर्ताओं को ऐप्स से व्यवहार करने की अपेक्षा से अलग तरीके से व्यवहार करे। यदि ओएस के लिए मानक व्यवहार ऐसा है कि उपयोगकर्ता विंडोज और लिनक्स के रूप में कई उदाहरण लॉन्च करने में सक्षम होने की उम्मीद करते हैं, तो उन्हें बस सक्षम होना चाहिए। यदि मानक व्यवहार मैक पर एक उदाहरण को मजबूर करना है, तो ओएस को स्वयं को लागू करने दें। – bames53
अच्छी तरह से ओएस में ऐसे व्यवहारों के लिए कोई मानक नहीं है। यह पूरी तरह से आवेदन निर्भर है – destan
bames53: ऐसे कई ऐप्स हैं जो केवल आपको एक उदाहरण शुरू करने देते हैं, और कभी-कभी यह करने के लिए तार्किक बात है। – rubenvb