Bài thực hành OS tuần 4 - Tạo và quản lý các tiểu trình - Thread.


Diễn đàn chia sẻ kiến thức, kinh nghiệm về IT và cuộc sống!
 
Trang ChínhGalleryTrợ giúpTìm kiếmThành viênNhómĐăng kýĐăng Nhập
Top posters
Sakura (1124)
 
hotboy (705)
 
Già Làng (373)
 
con_ca_nho90 (289)
 
that_true (154)
 
theanhkkt (143)
 
phamay (137)
 
lovelonelyman (134)
 
o0ovioletstaro0o (128)
 
stevenhung (122)
 
Âm - Dương lịch
Clock
Logo
11TH02 Pro!
Liên kết
Tin tức 60s
Tin công nghệ
Thời sự 24h
Game Moblie

Share | 
 

 Bài thực hành OS tuần 4 - Tạo và quản lý các tiểu trình - Thread.

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giảThông điệp
Sakura


avatar

Thú CƯng :
Nam Scorpio

Số bài viết : 1124
Điểm : 1688
Được cảm ơn : 35
Ngày sinh : 03/11/1990
Tham gia ngày : 16/03/2010
Tuổi : 27
Đến từ : Bình Dương
Ngề nghiệp : IT Student

Bài gửiTiêu đề: Bài thực hành OS tuần 4 - Tạo và quản lý các tiểu trình - Thread.   31/3/2011, 10:09

Tiêu đề đã nói quá rõ, các bạn, ai chưa có thì copy về tham khảo để tuần sau tiếp tục.
Bài còn rất đơn sơ, ai thik tinh chỉnh gì thì cứ việc nha!

Code:
//Thuc hanh OS tuan 4
//Tao va quan ly cac tieu trinh - Thread.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <Windows.h>
#include <iostream>

using namespace std;

void Clrscr(void)
{
   CONSOLE_SCREEN_BUFFER_INFO  csbiInfo;                 
   HANDLE  hConsoleOut;
   COORD  Home = {0,0};
   DWORD  dummy;

   hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
   GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);

   FillConsoleOutputCharacter(hConsoleOut,' ',csbiInfo.dwSize.X * csbiInfo.dwSize.Y,Home,&dummy);
   csbiInfo.dwCursorPosition.X = 0;                       
   csbiInfo.dwCursorPosition.Y = 0;                       
   SetConsoleCursorPosition(hConsoleOut,csbiInfo.dwCursorPosition);
}

void GotoXY(short x,short y)
{
   HANDLE hConsoleOutput;
   COORD Cursor_an_Pos = { x,y};
   hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
   SetConsoleCursorPosition(hConsoleOutput , Cursor_an_Pos);
}

void SetColor(WORD color)
{
   HANDLE hConsoleOutput;
   hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);

   CONSOLE_SCREEN_BUFFER_INFO screen_buffer_info;
   GetConsoleScreenBufferInfo(hConsoleOutput, &screen_buffer_info);

   WORD wAttributes = screen_buffer_info.wAttributes;
   color &= 0x000f;
   wAttributes &= 0xfff0;
   wAttributes |= color;

   SetConsoleTextAttribute(hConsoleOutput, wAttributes);
}

void SetBGColor(WORD color)
{
   HANDLE hConsoleOutput;
   hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);

   CONSOLE_SCREEN_BUFFER_INFO screen_buffer_info;
   GetConsoleScreenBufferInfo(hConsoleOutput, &screen_buffer_info);

   WORD wAttributes = screen_buffer_info.wAttributes;
   color &= 0x000f;
   color <<= 4;
   wAttributes &= 0xff0f;
   wAttributes |= color;

   SetConsoleTextAttribute(hConsoleOutput, wAttributes);
}

int WhereX( void )
{
   HANDLE hConsoleOutput;
   hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
   CONSOLE_SCREEN_BUFFER_INFO coninfo;
   GetConsoleScreenBufferInfo (hConsoleOutput, &coninfo);
   return coninfo.dwCursorPosition.X;
}

int WhereY( void )
{
   HANDLE hConsoleOutput;
   hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
   CONSOLE_SCREEN_BUFFER_INFO coninfo;
   GetConsoleScreenBufferInfo (hConsoleOutput, &coninfo);
   return coninfo.dwCursorPosition.Y;
}

int MaxX()
{
   CONSOLE_SCREEN_BUFFER_INFO  csbiInfo;
   return csbiInfo.dwSize.X;
}

int MaxY()
{
   CONSOLE_SCREEN_BUFFER_INFO  csbiInfo;
   return csbiInfo.dwSize.Y;
}

void ThreadPro(LPVOID chon)
{
   char ch = (char)chon;
   int x = 0;
   int y = 0;
   switch(ch)
   {
   case '1':
      while(true)
      {
         GotoXY(20, 20);
         cout<<x;
         x++;
         Sleep(500);
      }
      break;

   case '2':
      while(true)
      {
         GotoXY(30, 30);
         cout<<y;
         y++;
         Sleep(500);
      }
      break;
   }
}

void menu()
{
   HANDLE hTh1, hTh2;
   DWORD idTh1, idTh2;
   hTh1 = hTh2 = NULL;

   char chon;
   do
   {
      Clrscr();
      cout<<"\n=====TIEU TRINH=====\n";
      cout<<"0. THOAT";
      cout<<"\n1. Tieu trinh 1.";
      cout<<"\n2. Tieu tirnh 2.";
      cout<<"\n3. Tam dung tieu trinh 1.";
      cout<<"\n4. Tam dung tieu trinh 2.";
      cout<<"\n5. Tiep tuc tieu trinh 1.";
      cout<<"\n6. Tiep tuc tieu trinh 2.";
      cout<<"\n7. Do uu tien tieu trinh 1.";
      cout<<"\n8. Do uu tien tieu trinh 2.";
      cout<<"\na. Cham dut tieu trinh 1.";
      cout<<"\nb. Cham dut tieu trinh 2.";
      cout<<"\nCHON: ";
      chon = _getche();
      switch(chon)
      {
      case '0':
         return;

      case '1':
         if(!hTh1)
         {
            hTh1 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadPro, (LPVOID)chon, 0, (LPDWORD)idTh1);
            if(hTh1 != NULL)
               cout<<"Tao thanh cong";
         }
         break;

      case '2':
         if(!hTh2)
         {
            hTh2 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadPro, (LPVOID)chon, 0, (LPDWORD)idTh2);
            if(hTh2 != NULL)
               cout<<"Tao thanh cong";
         }
         break;

      case '3':
         SuspendThread(hTh1);
         break;

      case '4':
         SuspendThread(hTh2);
         break;

      case '5':
         ResumeThread(hTh1);
         break;

      case '6':
         ResumeThread(hTh2);
         break;

      case '7':
         SetThreadPriority(hTh1, 15);
         break;

      case '8':
         SetThreadPriority(hTh2, 15);
         break;

      case 'a':
         TerminateThread(hTh1, -1000 );
         hTh1 = NULL;
         break;

      case 'b':
         TerminateThread(hTh2, -1000 );
         hTh2 = NULL;
         break;

      default:
         cout<<"\nKhong co phim chuc nang nay.";
         _getch();
         break;
      }
   }while(1);

}
int main()
{
   menu();
   return 0;
}

_________________________________________________
Khách viếng thăm muốn liên hệ với mình thì xem thông tin phía dưới nha:
Email: [You must be registered and logged in to see this link.]
Nick Yahoo: Edward_Thien
Về Đầu Trang Go down
Xem lý lịch thành viên
stevenhung

Member Năng Động


Member Năng Động
avatar

Nam Pisces

Số bài viết : 122
Điểm : 196
Được cảm ơn : 10
Ngày sinh : 20/03/1990
Tham gia ngày : 26/03/2010
Tuổi : 28
Đến từ : Bình Dương
Ngề nghiệp : Student
Chăm ngôn : Go far away

Bài gửiTiêu đề: Re: Bài thực hành OS tuần 4 - Tạo và quản lý các tiểu trình - Thread.   31/3/2011, 10:20

k đi học 2 buổi càng ngày càng *** ra rùi, pữa nào ewa_Hoang chỉ giáo lại cho tui tí nha, thank trước Rolling Eyes
Về Đầu Trang Go down
Xem lý lịch thành viên
 

Bài thực hành OS tuần 4 - Tạo và quản lý các tiểu trình - Thread.

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
IT World! :: HỌC TẬP :: HỌC KỲ V :: Hệ Điều Hành-