Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

सी प्रोग्राम में विंडोज थ्रेड एपीआई

विंडोज एपीआई में थ्रेड्स CreateThread () फ़ंक्शन का उपयोग करके बनाए जाते हैं, और - जैसे कि Pthreads में - सुरक्षा जानकारी, स्टैक के आकार और थ्रेड के लिए एक ध्वज जैसी विशेषताओं का एक सेट इस फ़ंक्शन को पास किया जाता है। नीचे दिए गए प्रोग्राम में, हम इन विशेषताओं के लिए डिफ़ॉल्ट मानों का उपयोग करते हैं। (डिफ़ॉल्ट मान प्रारंभ में थ्रेड को निलंबित स्थिति में सेट नहीं करते हैं और इसके बजाय इसे CPU शेड्यूलर द्वारा चलाने के योग्य बनाते हैं।) एक बार समन थ्रेड बनने के बाद, पैरेंट को Sum के मान को आउटपुट करने से पहले इसके पूरा होने की प्रतीक्षा करनी चाहिए, चूंकि मान समन थ्रेड द्वारा निर्धारित किया जाता है। Pthread प्रोग्राम में, हमने पैरेंट थ्रेड को pthread join() स्टेटमेंट का उपयोग करके समन थ्रेड के लिए प्रतीक्षा की थी। सारांश धागा बाहर निकल गया है। ऐसी स्थितियों में जिनमें कई थ्रेड्स के पूरा होने की प्रतीक्षा की आवश्यकता होती है, WaitForMultipleObjects () फ़ंक्शन का उपयोग किया जाता है। यह फ़ंक्शन चार पैरामीटर पास करता है -

  • प्रतीक्षा करने के लिए वस्तुओं की संख्या
  • वस्तुओं की सरणी के लिए एक सूचक
  • एक ध्वज जो दर्शाता है कि क्या सभी वस्तुओं को संकेत दिया गया है।
  • एक समयबाह्य अवधि (या अनंत)

उदाहरण के लिए, यदि Thandles आकार N के थ्रेड हैंडल ऑब्जेक्ट्स की एक सरणी है, तो पैरेंट थ्रेड इस कथन के साथ अपने सभी चाइल्ड थ्रेड्स के पूरा होने की प्रतीक्षा कर सकता है -

WaitForMultipleObjects(N, Thandles, TRUE, INFINITE);

Windows API का उपयोग करते हुए बहु-थ्रेडेड C प्रोग्राम।

उदाहरण

#include<windows.h>
#include<stdio.h>
DWORD Sum;
/* data is shared by the thread(s) */
/* thread runs in this separate function */
DWORD WINAPI Summation(LPVOID Param){
   DWORD Upper = *(DWORD*)Param;
   for (DWORD i = 0; i <= Upper; i++)
   Sum += i;
   return 0;
}
int main(int argc, char *argv[]){
   DWORD ThreadId;
   HANDLE ThreadHandle;
   int Param;
   if (argc != 2){
      fprintf(stderr,"An integer parameter is required\n");
      return -1;
   }
   Param = atoi(argv[1]);
   if (Param < 0){
      fprintf(stderr,"An integer >= 0 is required\n");
      return -1;
   }
   /* create the thread */
   ThreadHandle = CreateThread( NULL, /* default security attributes */ 0, /* default stack size */    
   Summation, /* thread function */ &Param, /* parameter to thread function */ 0, /* default creation    flags */ &ThreadId);
   /* returns the thread identifier */
   if (ThreadHandle != NULL){
      /* now wait for the thread to finish */ WaitForSingleObject(ThreadHandle,INFINITE);
      /* close the thread handle */
      CloseHandle(ThreadHandle);
      printf("sum = %d\n",Sum);
   }
}

  1. मेरे विंडोज 10 पर WWAHost.exe प्रक्रिया क्या है? क्या मैं इसे अक्षम कर सकता हूं?

    WWAHost.exe (माइक्रोसॉफ्ट डब्ल्यूडब्ल्यूए होस्ट) Microsoft का एक प्रोग्राम है जो कुछ विंडोज़ ऐप्स को ठीक से चलाने की अनुमति देता है। इसलिए यदि आप यह सोचकर यहां आए हैं कि क्या WWAHost.exe एक वायरस है, और आपको इसे अनइंस्टॉल कर देना चाहिए, तो ऐसा नहीं है। यह Microsoft . द्वारा पेश किया गया एक सहायक कार

  1. विंडोज प्रोग्राम को सिस्टम ट्रे में कैसे छोटा करें

    विंडोज इंटरफेस दशकों से कई उतार-चढ़ाव से गुजरा है। कुछ विकास, जैसे कि स्टार्ट मेनू, प्रिय हैं। अन्य, जैसे कि दुर्भाग्यपूर्ण विंडोज 8 मेट्रो इंटरफेस, काफी हद तक नापसंद हैं। टास्क बार, जहां आपकी न्यूनतम खिड़कियां रहती हैं, शायद ही इस तरह की नफरत का लक्ष्य हो। हालांकि, इसमें काफी भीड़ हो सकती है। आपक

  1. Windows Insider Program के लिए उपयोगी फ़ीडबैक कैसे सबमिट करें

    माइक्रोसॉफ्ट को विंडोज इनसाइडर प्रोग्राम और फीडबैक हब से बहुत अधिक मूल्य मिलता है, लेकिन प्रयोग करने योग्य फीडबैक जमा करना मुश्किल हो सकता है जिसका वास्तव में उपयोग किया जाएगा। यहां माइक्रोसॉफ्ट के नए कोहोर्ट्स प्रोग्राम, फीडबैक हब कैसे काम करता है, और कैसे व्यवहार्य फीडबैक सबमिट करने के बारे में कु