PDA

View Full Version : Tài liệu về multi thread trong C/C++?



thansautk
08-12-2008, 08:32 AM
bạn nào có tài liệu về multi thread trong c++ cho minh xin với.mình đang nghiên cứu về nó mà toàn tài liệu bằng java thôi.cảm ơn các bạn.hì

meoconlongvang
08-12-2008, 09:12 AM
Bạn vào MSDN xem hàm CreateThread

thansautk
08-12-2008, 09:40 AM
không biết là có cần thư viện gì không?chứ mình làm giống như trong MSDN những toàn báo lỗi thôi!

thank! minh lam duoc roi! cam on ban nhieu.

sovietw0rm
06-04-2009, 03:37 PM
mình đã làm trương trình dùng multi-threads trên c++ dùng afxwin cái này trong thư viện MFC nói chung khá là đơn giản.

hieuhc
04-10-2010, 09:38 AM
mình đã làm trương trình dùng multi-threads trên c++ dùng afxwin cái này trong thư viện MFC nói chung khá là đơn giản.

mình đang tìm hiểu về phần này. nhưng còn mù mờ quá. bạn có thể nói rõ hơn được ko? hoặc bạn có thể cho mình xin code đơn giản về multithread được không? cảm ơn bạn nhiều

athena_hip
04-10-2010, 01:27 PM
mình đang tìm hiểu về phần này. nhưng còn mù mờ quá. bạn có thể nói rõ hơn được ko? hoặc bạn có thể cho mình xin code đơn giản về multithread được không? cảm ơn bạn nhiều

Bạn thử chạy cái này coi :)

Có 3 thread.
Thread 1: đẩy vào queue 1 số tự nhiên lẻ trong khoảng 1, .., 10
Thread 2: đẩy vào queue 1 số tự nhiên chẵn trong khoảng 1, .., 10
Thread 3: Lấy trong queue ra 1 số tự nhiên ở đầu và in ra màn hình (in xong xóa số đó trong queue)

Bấm P để tạm dừng chương trình
Bấm C để tiếp tục chương trình
Bấm ESC để thoát khỏi chương trình.


#include <windows.h>
#include <queue>
#include <conio.h>
#include <stdio.h>
#include <tchar.h>

using namespace std;

typedef queue<int> queue_int;

unsigned long __stdcall Thread1(void* param);
unsigned long __stdcall Thread2(void* param);
unsigned long __stdcall Thread3(void* param);

void* handler_thread1 = 0;
void* handler_thread2 = 0;
void* handler_thread3 = 0;

int running1, running2;

void* mutex;
queue_int integer_queue;
unsigned int number = 0;
///////////////////////////////////////////////////////
int _tmain(int argc, _TCHAR* argv[])
{

//HWND hwnd = GetConsoleWindow();
mutex = CreateMutex(0, false, 0);

unsigned long id_thread;
handler_thread1 = CreateThread(0, 0, Thread1, 0, 0, &id_thread);
if(!handler_thread1)
{
printf("Cannot create thread1. Error code = %d\n", GetLastError());
getch();
return -1;
}
handler_thread2 = CreateThread(0, 0, Thread2, 0, 0, &id_thread);
if(!handler_thread2)
{
printf("Cannot create thread2. Error code = %d\n", GetLastError());
running1 = 0;
WaitForSingleObject(handler_thread1, INFINITE);
getch();
return -1;
}
handler_thread3 = CreateThread(0, 0, Thread3, 0, 0, &id_thread);
if(!handler_thread3)
{
printf("Cannot create thread3. Error code = %d\n", GetLastError());
running1 = 0;
running2 = 0;
WaitForSingleObject(handler_thread2, INFINITE);
getch();
return -1;
}

WaitForSingleObject(handler_thread3, INFINITE);

printf("\nEnd Thread3\n");
CloseHandle(handler_thread1);
CloseHandle(handler_thread2);
CloseHandle(handler_thread3);

printf("\n\nExit program\n");
Sleep(1000);
return 0;
}
///////////////////////////////////////////////////////
unsigned long __stdcall Thread1(void* param)
{
running1 = 1;
while(running1)
{
WaitForSingleObject(mutex, INFINITE);
if(!(number % 2))
{
integer_queue.push(number++ % 10 + 1);
}
ReleaseMutex(mutex);
}
printf("\nEnd Thread1\n");
return 0;
}
///////////////////////////////////////////////////////
unsigned long __stdcall Thread2(void* param)
{
running2 = 1;
while(running2)
{
WaitForSingleObject(mutex, INFINITE);
if(number % 2)
{
integer_queue.push(number++ % 10 + 1);
}
ReleaseMutex(mutex);
}
WaitForSingleObject(handler_thread1, INFINITE);
printf("\nEnd Thread2\n");
return 0;
}
unsigned long __stdcall Thread3(void* param)
{
while(1)
{
WaitForSingleObject(mutex, INFINITE);
if(!integer_queue.empty())
{
int n = integer_queue.front();
printf("%4d", n);
if(n && n % 10 == 0)
printf("\n");
integer_queue.pop();
}
if(kbhit())
{
char key = getch();
switch(key)
{
case 'P':
case 'p':
{
while(1)
{
if(kbhit())
{
char key_in = getch();
if(key_in == 'C' || key_in == 'c' )
break;
else if(key_in == 0x1B)
{
running1 = 0;
running2 = 0;
ReleaseMutex(mutex);
WaitForSingleObject(handler_thread2, INFINITE);
return 0;
}
}
}
}
break;
case 0x1B:
{
running1 = 0;
running2 = 0;
ReleaseMutex(mutex);
WaitForSingleObject(handler_thread2, INFINITE);
}
return 0;
default:
break;
}
}
else
Sleep(1);
ReleaseMutex(mutex);
}
printf("\nEnd Thread3\n");
return 0;
}

caoluc_lfpro
16-11-2011, 01:37 PM
Các bạn có thể gợi ý cho mình bài này !!!!!!!!!
Viết chương trình Multi Thread cho bài toán: Đọc vào 1 dãy A từ File, và dùng n thread sắp xếp dãy theo thứ tự tăng dần
+Mỗi Thread lấy một phần tử của dãy A và sắp xếp theo thứ tự tăng dần
+Sau đó 1 Thread trộn các dãy do các Thread vừa rồi đã sắp xếp thành dãy kết quả.


Cảm ơn!

takiemtam
19-03-2013, 01:21 PM
C/C++ có khả năng can thiệp vào các tiến trình đang chạy ko nhỉ, kiểu như cấm ko cho chạy YH, Chrome trc 9h đêm vậy (phải học bài trc), bạn nào có tài liệu nói về điều này cho mình xin nhé :D