Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: cách Tạo Nhiều Thread trong C++

  1. #1
    Ngày gia nhập
    03 2008
    Bài viết
    5

    Smile cách Tạo Nhiều Thread trong C++

    Tớ mới làm quen C++ được ít lâu , có bài toán này muốn nhờ các bạn giúp :

    VD mình có một hình chữ nhật kích thước 50x30 . Mình có 1 chữ cái muốn cho nó di chuyển chỉ trong hình chữ nhật đó . Mình đã là xong các hàm để nó dội lại khi gặp cạnh trên , cạnh dưới ,cạnh trái, cạnh phải rồi .

    Bây giở mình muốn tạo khoảng 3 chữ cái như thế và cho nó di chuyển cùng lúc trong hình chữ nhật đó . Mình có tìm hiểu thì được biết có thể tạo 3 thread khác nhau và dùng các lệnh dịch chuyển trên là tài nguyên chung , nhưng mình không rõ lắm , mong các bạn chỉ giúp

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Bạn đang nói về MFC phải ko ? Nếu vậy thì topic này phải move sang box vc++ mới đúng. Bạn vô msdn tham khảo hàm CreateThread. Tham số thứ 3 của hàm này sẽ yêu cầu truyền vào con trỏ đến hàm ThreadProc và hàm ThreadProc lại nhận một con trỏ kiểu void. Con trỏ này dùng để trỏ tới địa chỉ của các tài nguyên dùng chung ( các biến lưu tọa độ của hình chữ nhật, của các chữ .... )
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    Ngày gia nhập
    03 2008
    Bài viết
    5

    Ui , tớ ko biết , xin lỗi nhiều , có thể nhờ bạn mod chuyển sang đúng chỗ được ko ?

    Tiện thể bạn có thể giải thích dùm tớ các hàm cần thiết được ko , tại tớ mới làm quen với C++ nên ko hiểu rõ các thông số đi kèm các hàm

  4. #4
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mình ko phải mod box này nên ko di chuyển bài của bạn được. Để mod khác sẽ dời đi vậy.
    Đây là hàm CreateThread :
    C++ Code:
    1. HANDLE CreateThread(
    2.   LPSECURITY_ATTRIBUTES lpThreadAttributes,
    3.   SIZE_T dwStackSize,
    4.   LPTHREAD_START_ROUTINE lpStartAddress,
    5.   LPVOID lpParameter,
    6.   DWORD dwCreationFlags,
    7.   LPDWORD lpThreadId
    8. );
    Tham số :
    lpThreadAttributes = NULL
    dwStackSize = 0
    lpStartAddress : con trỏ tới hàm ThreadProc
    lpParameter : con trỏ tới cấu trúc lưu tài nguyên dùng chung
    dwCreationFlags = 0
    lpThreadId = 0 cho đơn giản

    Còn đây là hàm ThreadProc
    C++ Code:
    1. DWORD WINAPI ThreadProc(
    2.   LPVOID lpParameter
    3. );
    lpParameter chính là con trỏ tới cấu trúc lưu tài nguyên dùng chung lúc nãy truyền vào hàm CreateThread.

    Bạn gom tất cả tài nguyên dùng chung vào một struct và truyền địa chỉ struct này vào lpParameter của hàm CreateThread.

    Chúc bạn thành công !
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  5. #5
    Ngày gia nhập
    03 2008
    Bài viết
    5

    C Code:
    1. #include <windows.h>
    2. #include <stdio.h>
    3. #include <ctime>
    4.  
    5.  
    6. void gotoXY(int x, int y);
    7. void ClearConsole(void);
    8. void SetColor(int ForgC);
    9.  
    10.  
    11.  
    12. void ClearConsole()
    13. {
    14.      
    15.      HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    16.      
    17.      COORD coord = {0, 0};
    18.  
    19.      DWORD count;
    20.    
    21.      CONSOLE_SCREEN_BUFFER_INFO csbi;
    22.      
    23.      if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
    24.      {          
    25.           FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);
    26.           FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &count );
    27.           SetConsoleCursorPosition(hStdOut, coord);
    28.      }
    29.      return;
    30. }
    31.  
    32.  
    33. void gotoXY(int x, int y)
    34. {
    35.      COORD coord = {x, y};
    36.      SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
    37.      return;
    38. }
    39.  
    40.  
    41. void SetColor(int ForgC)
    42. {
    43.      WORD wColor;
    44.      HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    45.      CONSOLE_SCREEN_BUFFER_INFO csbi;
    46.      
    47.      if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
    48.      {
    49.           wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);
    50.           SetConsoleTextAttribute(hStdOut, wColor);    
    51.      }
    52.      return;
    53. }
    54.  
    55. char C='X';
    56. int xmax=49,
    57.     xmin=0,
    58.     ymax=39,
    59.     ymin=0,
    60.     x,y,h,t;
    61.    
    62.  
    63. void TB_DN(int& x,int& y,int& h)    // ha'm di.ch chuye^?n theo huo'ng TayBac-DongNam
    64. {
    65.     gotoXY(x,y);
    66.     SetColor(10);
    67.     printf("%c",C);
    68.     x++;
    69.     y++;
    70.     h=13;
    71.     Sleep(5);
    72. }
    73.  
    74. void DN_TB(int& x,int& y,int& h)    // ha'm di.ch chuye^?n theo huo'ng DongNam-TayBac
    75. {
    76.     gotoXY(x,y);
    77.     SetColor(11);
    78.     printf("%c",C);
    79.     x--;
    80.     y--;
    81.     h=31;
    82.     Sleep(5);
    83. }
    84.  
    85. void TN_DB(int& x,int& y,int& h)    // ha'm di.ch chuye^?n theo huo'ng TayNam_DongBac
    86. {
    87.     gotoXY(x,y);
    88.     SetColor(12);
    89.     printf("%c",C);
    90.     x++;
    91.     y--;
    92.     h=42;
    93.     Sleep(5);
    94. }
    95.  
    96. void DB_TN(int& x,int& y,int& h)    // ha'm di.ch chuye^?n theo huo'ng DongBac_TayNam
    97. {
    98.     gotoXY(x,y);
    99.     SetColor(13);
    100.     printf("%c",C);
    101.     x--;
    102.     y++;
    103.     h=24;
    104.     Sleep(5);
    105. }
    106.  
    107. void main()
    108. {
    109.     srand((unsigned)time(NULL));       
    110.     x=rand()%(xmax);
    111.     y=rand()%(ymax);
    112.     h=13;
    113.  
    114.     do
    115.     {  
    116.         //ClearConsole();//    
    117.         if ((x!=xmin)&&(x!=xmax)&&(y!=ymin)&&(y!=ymax))
    118.         {
    119.         if (h==13) TB_DN(x,y,h); //  So? do^`  12               13: TayBac-DongNam
    120.         if (h==31) DN_TB(x,y,h); //          43             31: DongNam-TayBac 
    121.         if (h==42) TN_DB(x,y,h); //                     42: TayNam-Dongbac
    122.         if (h==24) DB_TN(x,y,h); //                     24: DongBac-TayNam
    123.         }  
    124.         else
    125.         {
    126.             if ((x==xmin)&&(y==ymin)) TB_DN(x,y,h);     // cha.m go'c tra'i tre^n
    127.             if ((x==xmax)&&(y==ymin)) DB_TN(x,y,h);     // cha.m go'c pha?i tre^n
    128.             if ((y==ymax)&&(x==xmax)) DN_TB(x,y,h);     // cha.m go'c pha?i duo'i
    129.             if ((y==ymax)&&(x==xmin)) TN_DB(x,y,h);     // cha.m go'c tra'i duo'i
    130.                
    131.        
    132.             if (x==xmax)                                // cha.m bie^n pha?i
    133.                 if (h==13) DB_TN(x,y,h);
    134.                 else DN_TB(x,y,h);
    135.                
    136.             if (x==xmin)                                // cha.m bie^n tra'i
    137.                 if (h==24) TB_DN(x,y,h);
    138.                 else TN_DB(x,y,h);
    139.                        
    140.             if (y==ymax)                                // cha.m bie^n tre^n
    141.                 if (h==13) TN_DB(x,y,h);
    142.                 else DN_TB(x,y,h);
    143.  
    144.             if (y==ymin)                                // cha.m bie^n duo'i
    145.                 if (h==42) TB_DN(x,y,h);
    146.                 else DB_TN(x,y,h);
    147.         }
    148.         t=1; //t=1 de lap vo han.
    149.     }
    150.     while (t>0);
    151. }

    Bạn có thể minh họa cụ thể bằng chương trình trên của tớ ko ? Tại tớ vẫn ko hiểu rõ lắm , cám ơn bạn nhiều ^_^
    Đã được chỉnh sửa lần cuối bởi children : 24-10-2008 lúc 06:04 PM.

  6. #6
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mặc định cách Tạo Nhiều Thread trong C++

    Làm vầy nè bạn :

    C++ Code:
    1. #include <windows.h>
    2. #include <stdio.h>
    3. #include <ctime>
    4.  
    5. void gotoXY(int x, int y);
    6. void ClearConsole(void);
    7. void SetColor(int ForgC);
    8.  
    9. int xmax=49,
    10.     xmin=0,
    11.     ymax=39,
    12.     ymin=0;
    13.    
    14.  
    15.  
    16. void ClearConsole()
    17. {
    18.      
    19.      HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    20.      
    21.      COORD coord = {0, 0};
    22.  
    23.      DWORD count;
    24.    
    25.      CONSOLE_SCREEN_BUFFER_INFO csbi;
    26.      
    27.      if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
    28.      {          
    29.           FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);
    30.           FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &count );
    31.           SetConsoleCursorPosition(hStdOut, coord);
    32.      }
    33.      return;
    34. }
    35.  
    36.  
    37. void gotoXY(int x, int y)
    38. {
    39.      COORD coord = {x, y};
    40.      SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
    41.      return;
    42. }
    43.  
    44.  
    45. void SetColor(int ForgC)
    46. {
    47.      WORD wColor;
    48.      HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    49.      CONSOLE_SCREEN_BUFFER_INFO csbi;
    50.      
    51.      if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
    52.      {
    53.           wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);
    54.           SetConsoleTextAttribute(hStdOut, wColor);    
    55.      }
    56.      return;
    57. }
    58.  
    59. void TB_DN(int& x,int& y,int& h,char C) // ha'm di.ch chuye^?n theo huo'ng TayBac-DongNam
    60. {
    61.     gotoXY(x,y);
    62.     SetColor(10);
    63.     printf("%c",C);
    64.     x++;
    65.     y++;
    66.     h=13;
    67.     Sleep(5);
    68. }
    69.  
    70. void DN_TB(int& x,int& y,int& h,char C) // ha'm di.ch chuye^?n theo huo'ng DongNam-TayBac
    71. {
    72.     gotoXY(x,y);
    73.     SetColor(11);
    74.     printf("%c",C);
    75.     x--;
    76.     y--;
    77.     h=31;
    78.     Sleep(5);
    79. }
    80.  
    81. void TN_DB(int& x,int& y,int& h,char C) // ha'm di.ch chuye^?n theo huo'ng TayNam_DongBac
    82. {
    83.     gotoXY(x,y);
    84.     SetColor(12);
    85.     printf("%c",C);
    86.     x++;
    87.     y--;
    88.     h=42;
    89.     Sleep(5);
    90. }
    91.  
    92. void DB_TN(int& x,int& y,int& h,char C) // ha'm di.ch chuye^?n theo huo'ng DongBac_TayNam
    93. {
    94.     gotoXY(x,y);
    95.     SetColor(13);
    96.     printf("%c",C);
    97.     x--;
    98.     y++;
    99.     h=24;
    100.     Sleep(5);
    101. }
    102.  
    103. void Drawing(char C)
    104. {
    105.     srand((unsigned)time(NULL));       
    106.     int x,y,h,t;
    107.     x =rand()%(xmax);
    108.     y =rand()%(ymax);
    109.     h =13;
    110.  
    111.     do
    112.     {  
    113.         //ClearConsole();//    
    114.         if ((x!=xmin)&&(x!=xmax)&&(y!=ymin)&&(y!=ymax))
    115.         {
    116.             if (h==13) TB_DN(x,y,h,C); //  So? do^`  12             13: TayBac-DongNam
    117.             if (h==31) DN_TB(x,y,h,C); //            43             31: DongNam-TayBac 
    118.             if (h==42) TN_DB(x,y,h,C); //                       42: TayNam-Dongbac
    119.             if (h==24) DB_TN(x,y,h,C); //                       24: DongBac-TayNam
    120.         }  
    121.         else
    122.         {
    123.             if ((x==xmin)&&(y==ymin)) TB_DN(x,y,h,C);       // cha.m go'c tra'i tre^n
    124.             if ((x==xmax)&&(y==ymin)) DB_TN(x,y,h,C);       // cha.m go'c pha?i tre^n
    125.             if ((y==ymax)&&(x==xmax)) DN_TB(x,y,h,C);       // cha.m go'c pha?i duo'i
    126.             if ((y==ymax)&&(x==xmin)) TN_DB(x,y,h,C);       // cha.m go'c tra'i duo'i
    127.                
    128.        
    129.             if (x==xmax)                                // cha.m bie^n pha?i
    130.                 if (h==13) DB_TN(x,y,h,C);
    131.                 else DN_TB(x,y,h,C);
    132.                
    133.             if (x==xmin)                                // cha.m bie^n tra'i
    134.                 if (h==24) TB_DN(x,y,h,C);
    135.                 else TN_DB(x,y,h,C);
    136.                        
    137.             if (y==ymax)                                // cha.m bie^n tre^n
    138.                 if (h==13) TN_DB(x,y,h,C);
    139.                 else DN_TB(x,y,h,C);
    140.  
    141.             if (y==ymin)                                // cha.m bie^n duo'i
    142.                 if (h==42) TB_DN(x,y,h,C);
    143.                 else DB_TN(x,y,h,C);
    144.         }
    145.         t=1; //t=1 de lap vo han.
    146.     }
    147.     while (t>0);
    148. }
    149.  
    150. DWORD WINAPI ThreadProc1(LPVOID lpParameter)
    151. {
    152.     Drawing('X');
    153.     return 0;
    154. }
    155.  
    156. DWORD WINAPI ThreadProc2(LPVOID lpParameter)
    157. {
    158.     Drawing('K');
    159.     return 0;
    160. }
    161.  
    162. void main()
    163. {
    164.     CreateThread(NULL,0,ThreadProc1,NULL,0,NULL);
    165.     CreateThread(NULL,0,ThreadProc2,NULL,0,NULL);
    166.     Drawing('Y');
    167. }
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  7. #7
    Ngày gia nhập
    10 2007
    Bài viết
    169

    Cậu mèo con này "hăng" quá , đi đâu cũng gặp hết !!!
    Mình chỉ thêm tí vào cái này thôi:
    + Nếu cần tạo thread với số lượng < 32 -> dùng CreateThread
    + Còn >= 32 thì dùng _beginthread()!

  8. #8
    Ngày gia nhập
    03 2008
    Bài viết
    5

    Hic , mấy hôm bận việc ko vào được , ko ngờ được mọi người giúp đỡ tận tình quá , cảm ơn mọi người nhiều ^_^ ( nhất là bạn meocon ^_^)

    à , cho tớ hỏi cái nữa nha , chương trình trên kia bạn meocon viết tớ về thử thì nó tạo cho tớ 2 tiểu trình , nhưng mà 2 tiểu trình đó nó chạy cùng tọa độ ( nói đúng hơn là gần ) với nhau , còn ý tớ là muốn tạo ra 2-3 chữ cái , mỗi chữ cái có tọa độ khác nhau để có lộ trình khác nhau cơ .

    Tớ có thử sửa thì nó đã chạy được các tiểu trình khác nhau , nhưng mà có vẻ nó thực hiện xong cái này rồi mới đến cái khác chứ ko chạy song song hay sao ấy . VD tớ có 3 chữ cái a,b,c có tọa độ khác nhau , thì CT phải viết chữ a ở tọa độ của chữ a xong mới nhảy sang tọa độ chữ b viết chữ b , cuối cùng là viết chữ c , nên nhìn các chữ nó cứ nhấp nháy liên tục .

    Đây , những chỗ tớ sửa tớ đã đánh dấu đổ để mọi người tiện theo dõi :

    à cũng ko hiểu sao nếu ể ở chế độ Win mode xem thì thấy nó hiện lên tại một tọa rất nhiều chữ cái , còn ở dos full screen thì lại hiện đúng .

    C Code:
    1. #include <windows.h>
    2. #include <stdio.h>
    3. #include <ctime>
    4.  
    5. void gotoXY(int x, int y);
    6. void ClearConsole(void);
    7. void SetColor(int ForgC);
    8. void HideTheCursor(void);
    9.  
    10. int xmax=49,
    11.     xmin=0,
    12.     ymax=39,
    13.     ymin=0;
    14.    
    15. void ClearConsole()
    16. {
    17.      
    18.      HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    19.      
    20.      COORD coord = {0, 0};
    21.  
    22.      DWORD count;
    23.    
    24.      CONSOLE_SCREEN_BUFFER_INFO csbi;
    25.      
    26.      if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
    27.      {          
    28.           FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);
    29.           FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &count );
    30.           SetConsoleCursorPosition(hStdOut, coord);
    31.      }
    32.      return;
    33. }
    34.  
    35.  
    36. void gotoXY(int x, int y)
    37. {
    38.      COORD coord = {x, y};
    39.      SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
    40.      return;
    41. }
    42.  
    43.  
    44. void SetColor(int ForgC)
    45. {
    46.      WORD wColor;
    47.      HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    48.      CONSOLE_SCREEN_BUFFER_INFO csbi;
    49.      
    50.      if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
    51.      {
    52.           wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);
    53.           SetConsoleTextAttribute(hStdOut, wColor);    
    54.      }
    55.      return;
    56. }
    57.  
    58. //Hides the console cursor
    59. void HideTheCursor()
    60. {
    61.      CONSOLE_CURSOR_INFO cciCursor;
    62.      HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    63.      
    64.      
    65.      if(GetConsoleCursorInfo(hStdOut, &cciCursor))
    66.      {
    67.           cciCursor.bVisible=FALSE;
    68.      }
    69.      return;
    70. }
    71.  
    72.  
    73. void TB_DN(int& x,int& y,int& h,char C) // ha'm di.ch chuye^?n theo huo'ng TayBac-DongNam
    74. {
    75.     gotoXY(x,y);
    76.     SetColor(10);
    77.     printf("%c",C);
    78.     x++;
    79.     y++;
    80.     h=13;
    81.     Sleep(100);
    82. }
    83.  
    84. void DN_TB(int& x,int& y,int& h,char C) // ha'm di.ch chuye^?n theo huo'ng DongNam-TayBac
    85. {
    86.     gotoXY(x,y);
    87.     SetColor(11);
    88.     printf("%c",C);
    89.     x--;
    90.     y--;
    91.     h=31;
    92.     Sleep(100);
    93. }
    94.  
    95. void TN_DB(int& x,int& y,int& h,char C) // ha'm di.ch chuye^?n theo huo'ng TayNam_DongBac
    96. {
    97.     gotoXY(x,y);
    98.     SetColor(12);
    99.     printf("%c",C);
    100.     x++;
    101.     y--;
    102.     h=42;
    103.     Sleep(100);
    104. }
    105.  
    106. void DB_TN(int& x,int& y,int& h,char C) // ha'm di.ch chuye^?n theo huo'ng DongBac_TayNam
    107. {
    108.     gotoXY(x,y);
    109.     SetColor(13);
    110.     printf("%c",C);
    111.     x--;
    112.     y++;
    113.     h=24;
    114.     Sleep(100);
    115. }
    116.  
    117. [COLOR="Red"]void Drawing(char C,int x,int y,int h)[/COLOR]
    118. {
    119.     srand((unsigned)time(NULL));      
    120.     //int x,y,h,t;
    121.  
    122.     int t;
    123.     do
    124.     {  
    125.         ClearConsole();  
    126.         Sleep(100);
    127.         if ((x!=xmin)&&(x!=xmax)&&(y!=ymin)&&(y!=ymax))
    128.         {
    129.             if (h==13) TB_DN(x,y,h,C); //  So? do^`  12             13: TayBac-DongNam
    130.             if (h==31) DN_TB(x,y,h,C); //            43             31: DongNam-TayBac
    131.             if (h==42) TN_DB(x,y,h,C); //                       42: TayNam-Dongbac
    132.             if (h==24) DB_TN(x,y,h,C); //                       24: DongBac-TayNam
    133.         }  
    134.         else
    135.         {
    136.             if ((x==xmin)&&(y==ymin)) TB_DN(x,y,h,C);       // cha.m go'c tra'i tre^n
    137.             if ((x==xmax)&&(y==ymin)) DB_TN(x,y,h,C);       // cha.m go'c pha?i tre^n
    138.             if ((y==ymax)&&(x==xmax)) DN_TB(x,y,h,C);       // cha.m go'c pha?i duo'i
    139.             if ((y==ymax)&&(x==xmin)) TN_DB(x,y,h,C);       // cha.m go'c tra'i duo'i
    140.                
    141.        
    142.             if (x==xmax)                                // cha.m bie^n pha?i
    143.                 if (h==13) DB_TN(x,y,h,C);
    144.                 else DN_TB(x,y,h,C);
    145.                
    146.             if (x==xmin)                                // cha.m bie^n tra'i
    147.                 if (h==24) TB_DN(x,y,h,C);
    148.                 else TN_DB(x,y,h,C);
    149.                        
    150.             if (y==ymax)                                // cha.m bie^n tre^n
    151.                 if (h==13) TN_DB(x,y,h,C);
    152.                 else DN_TB(x,y,h,C);
    153.  
    154.             if (y==ymin)                                // cha.m bie^n duo'i
    155.                 if (h==42) TB_DN(x,y,h,C);
    156.                 else DB_TN(x,y,h,C);
    157.         }
    158.         t=1; //t=1 de lap vo han.
    159.     }
    160.     while (t>0);
    161. }
    162.  
    163. DWORD WINAPI ThreadProc1(LPVOID lpParameter)
    164. {
    165. [COLOR="Red"]
    166.     int x,y,h;
    167.     x = rand() % (xmax);
    168.     y = rand() % (ymax);
    169.     h = 24;
    170.     Drawing('a',x,y,h);[/COLOR]
    171.     return 0;
    172. }
    173.  
    174. DWORD WINAPI ThreadProc2(LPVOID lpParameter)
    175. {
    176.     [COLOR="Red"]
    177.     int x,y,h;
    178.     x = rand() % (xmax);
    179.     y = rand() % (ymax);
    180.     h = 42;
    181.     Drawing('b',x,y,h);[/COLOR]
    182.     return 0;
    183. }
    184.  
    185. DWORD WINAPI ThreadProc3(LPVOID lpParameter)
    186. {
    187.     [COLOR="Red"]
    188.     int x,y,h;
    189.     x = rand() % (xmax);
    190.     y = rand() % (ymax);
    191.     h = 13;
    192.     Drawing('c',x,y,h);[/COLOR]
    193.     return 0;
    194. }
    195.  
    196.  
    197.  
    198. int main()
    199. {
    200.    
    201.     DWORD dwThreadId[3];
    202.     HANDLE hThread[3];
    203.  
    204.         [COLOR="Red"]HideTheCursor();[/COLOR]// tớ thêm lệnh dấu con trỏ đi sao nó vẫn hiện //
    205.    
    206.    
    207.         hThread[0] = CreateThread(NULL, 0, ThreadProc1,          
    208.                                    NULL, 0, &dwThreadId[0]);  
    209.                 hThread[1] = CreateThread(NULL, 0, ThreadProc2,    
    210.                                    NULL, 0, &dwThreadId[1]);
    211.                 hThread[2] = CreateThread(NULL, 0, ThreadProc3,    
    212.                                    NULL, 0, &dwThreadId[2]);
    213.  
    214.                 WaitForMultipleObjects(2, hThread, TRUE, INFINITE);  
    215.    
    216.     getchar();
    217.     return 0;
    218. }
    Đã được chỉnh sửa lần cuối bởi children : 30-10-2008 lúc 05:44 PM.

  9. #9
    Ngày gia nhập
    03 2008
    Bài viết
    5

    À tớ đã sửa được lỗi nhấp nháy của chữ , còn các lỗi khác mong mọi người giúp đỡ :

    1. Xem ở Win mode thì thấy tại một vị trí xuất hiện nhiều chữ cái , còn dos full screen thì ko .
    2 Tớ dùng lệnh hide cursor nhưng ko có hiêu lực .
    3. Có cách nào để lấy giá trị random trong các giá trị có sẵn ko ?
    VD h=13,31,24,42 , tớ chỉ muốn h nhận một trong các giá trị đó bằng hàm rand .
    Đã được chỉnh sửa lần cuối bởi children : 30-10-2008 lúc 05:44 PM.

Các đề tài tương tự

  1. Thread có web browser chạy trong nhiều giờ bị lỗi.
    Gửi bởi i4uandu4i trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 7
    Bài viết cuối: 30-12-2012, 09:25 AM
  2. Cách chỉ định một thread chạy trên cpu của hệ thống nhiều cpu?
    Gửi bởi kiemkhach trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 29-08-2012, 05:31 PM
  3. Trả lời: 0
    Bài viết cuối: 16-02-2012, 10:37 PM
  4. Xử lý nhiều thread truyền nhiều file lớn như thế nào ?
    Gửi bởi iamme22021990 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 03-01-2012, 09:19 PM
  5. Thread trong Dialog và Thread trog Tabcontrol ???
    Gửi bởi nam_dkn trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 20-03-2009, 10:43 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn