কম্পিউটার

সি প্রোগ্রামে উইন্ডোজ থ্রেড API


Windows API-এ CreateThread() ফাংশন ব্যবহার করে থ্রেড তৈরি করা হয় এবং—ঠিক যেমন Pthreads-এর মতো—সুরক্ষা তথ্য, স্ট্যাকের আকার, এবং থ্রেডের জন্য একটি পতাকার মতো বৈশিষ্ট্যের একটি সেট এই ফাংশনে পাঠানো হয়। নীচের প্রোগ্রামে, আমরা এই বৈশিষ্ট্যগুলির জন্য ডিফল্ট মান ব্যবহার করি। (ডিফল্ট মানগুলি প্রাথমিকভাবে থ্রেডটিকে একটি স্থগিত অবস্থায় সেট করে না এবং পরিবর্তে এটিকে CPU শিডিউলারের দ্বারা চালানোর যোগ্য করে তোলে।) একবার যোগফল থ্রেড তৈরি হয়ে গেলে, অভিভাবককে যোগফলের মান আউটপুট করার আগে এটি সম্পূর্ণ হওয়ার জন্য অপেক্ষা করতে হবে, যেমন মান সমষ্টি থ্রেড দ্বারা সেট করা হয়. Pthread প্রোগ্রামে, আমরা প্যারেন্ট থ্রেডকে pthread join() স্টেটমেন্ট ব্যবহার করে সমীকরণ থ্রেডের জন্য অপেক্ষা করতে দিয়েছিলাম, এখানে WaitForSingleObject() ফাংশন ব্যবহার করে, আমরা Windows API-এ এর সমতুল্য কাজ করি, যার ফলে তৈরি করা থ্রেড ব্লক করা পর্যন্ত সমষ্টি থ্রেড প্রস্থান হয়েছে. যে পরিস্থিতিতে একাধিক থ্রেড সম্পূর্ণ করার জন্য অপেক্ষা করতে হয়, WaitForMultipleObjects() ফাংশন ব্যবহার করা হয়। এই ফাংশনটি চারটি প্যারামিটার −

পাস করেছে
  • অপেক্ষা করার জন্য অবজেক্টের সংখ্যা
  • অবজেক্টের অ্যারের জন্য একটি পয়েন্টার
  • একটি পতাকা নির্দেশ করে যে সমস্ত বস্তুকে সংকেত দেওয়া হয়েছে কিনা৷
  • একটি টাইমআউট সময়কাল (বা অসীম)

উদাহরণস্বরূপ, যদি THandles N আকারের থ্রেড হ্যান্ডেল অবজেক্টের একটি অ্যারে হয়, তাহলে প্যারেন্ট থ্রেড তার সমস্ত চাইল্ড থ্রেড এই বিবৃতি দিয়ে সম্পূর্ণ হওয়ার জন্য অপেক্ষা করতে পারে -

WaitForMultipleObjects(N, THandles, TRUE, INFINITE);

Windows API ব্যবহার করে মাল্টিথ্রেডেড সি প্রোগ্রাম।

উদাহরণ

#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. আমরা এখনই উইন্ডোজ ইনসাইডার প্রোগ্রামে পৌঁছাতে পারছি না

  2. আমার উইন্ডোজ 10 এ WWAHost.exe প্রক্রিয়া কি? আমি কি এটা নিষ্ক্রিয় করতে পারি?

  3. কিভাবে সিস্টেম ট্রেতে একটি উইন্ডোজ প্রোগ্রাম ছোট করবেন

  4. উইন্ডোজ ইনসাইডার প্রোগ্রামে কীভাবে ব্যবহারযোগ্য প্রতিক্রিয়া জমা দিতে হয়