2010-10-15 11 views
10

मैं एक प्रोग्राम बनाने के लिए सी (जीसीसी) और एनसीआरईएस का उपयोग कर रहा हूं जो धारावाहिक बंदरगाह से आने वाले डेटा की निगरानी करेगा। कार्यक्रम एक बड़ा while, जहां यह डेटा बंदरगाह से और एक ही समय में आ रहा है पढ़ता है, यह स्क्रीन में है कि जानकारी ...एक ही समय में अन्य चीजें करते समय कीबोर्ड से इनपुट कैसे प्राप्त करें?

प्रिंट लेकिन समस्या यहाँ है:

यह कैसे पढ़ सकते हैं मेरे कीबोर्ड से इनपुट, (getch() प्रोग्राम को तब तक फ्रीज करता है जब तक कि यह इनपुट न हो) और साथ ही पोर्ट से आने वाली जानकारी पढ़े?

शायद मुझे किसी अन्य तरीके का उपयोग करना है (बड़ा while नहीं), तो विचारों का स्वागत है!

+0

आप थ्रेड की जांच करना चाहेंगे: http://en.wikipedia.org/wiki/Thread_(computer_science) – sje397

+3

या उस मामले के लिए 'select() '। –

उत्तर

8

getch एक गैर अवरुद्ध कॉल nodelay विकल्प का उपयोग कर सकते हैं।

nodelay(stdscr,TRUE); 

अधिक जानकारी http://www.gsp.com/cgi-bin/man.cgi?topic=nodelay

+0

बिल्कुल वही जो मैं खोज रहा था! धन्यवाद!! – Tomas

+2

http://tldp.org/HOWTO/NCURSES- प्रोग्रामिंग- हाउटो/आप यहां से बहुत कुछ सीख सकते हैं। – Rozuur

+2

वह लिंक वास्तव में 'nodelay() ' – Wutaz

0

अपने वातावरण पर निर्भर करता है में पाया जा सकता आप शायद समारोह kbhit(), यह सिर्फ कुंजीपटल बफर में शिखर और गैर शून्य रिटर्न अगर वहाँ एक कुंजी है है - तो आप getch() कर सकते हैं।

(conio.h)

0

हो सकता है कि कांटा()? बस उस बच्चे तो चर सीधे उन दोनों के बीच साझा नहीं किया जा सकता है

pid_t pID = fork(); 
if (pID == 0) {    // child 
    // Code executed only by child process 
    // getch() ... 
} else if (pID < 0) {   // failed to fork 
    // Throw exception 
    // ... 
} else {      // parent 
    // Code executed only by parent process 
    // ... 
} 
+0

हाँ, मुझे पता है कि यह सिरदर्द - चेतावनी emptor का कारण बन सकता है। – belwood

+1

यह एक शानदार तरीका है ... मुझे यह नहीं पता था। लेकिन जब ncurses के साथ काम करते हैं, तो मुझे लगता है कि नोडेल विकल्प सरल है। – Tomas

0

select() या poll() प्रयास करें एक अलग प्रक्रिया में चलता ध्यान में रखना। वे दोनों एक ही काम करते हैं, लेकिन विभिन्न इंटरफेस के साथ। आप इसे फ़ाइल डिस्क्रिप्टर की एक सूची देते हैं, और यह तब तक इंतजार करेगा जब तक कि उनमें से कम से कम एक वर्णक तैयार नहीं हो जाता है, फिर वापस लौटाएं और बताएंगे कि अवरुद्ध किए बिना कौन से लोगों को पढ़ा जा सकता है (या लिखित)। उदाहरणों और अधिक जानकारी के लिए लिंक देखें।

-1

उपयोग cbreak() निष्क्रिय करने के लिए लाइन बफरिंग

nodelay(win, TRUE); 

इस आप एक गैर अवरुद्ध getch() समारोह मिल जाएगा।

+0

यह अभी भी तब तक अवरुद्ध होगा जब तक कोई कुंजी दबाया न जाए। – Wutaz

संबंधित मुद्दे