ورود

View Full Version : مبتدی: استفاده از Multi Threading در برنامه



Collector
جمعه 13 دی 1392, 20:40 عصر
سلام
من یک تابع دارم که داخل یک کلاس است میخوام به صورت موازی اجرا بشه کدم را این طوری نوشتم اما موقع اجرا خطا میده

HANDLE hThread;
unsigned threadID;
cout<<(hThread = (HANDLE)_beginthreadex(NULL, 0, Keyboard::StaticGeyKeyboard, NULL, 0, &threadID));


این را هم داخل کلاس نوشتم

static unsigned __stdcall StaticGeyKeyboard(void * pThis)
{
Keyboard * pthX = (Keyboard*)pThis;
pthX->GeyKeyboard();
return 1;
}

114802

Collector
جمعه 20 دی 1392, 11:27 صبح
برنامه را این طوری نوشتم
ولی انگار توابع موازی با هم اجرا نمیشوند و یکی پس از دیگری اجرا میشود انگار دو تابع را پشت هم فراخوانی کنیم

#include "stdafx.h"
#include <iostream>
#include <windows.h>

using namespace std;

class thread_data
{
public:
thread_data()
{
for (int i=0; i< 5; i++)
cout << "thread 1"<< endl;
}
};

class thread_data2
{
public:
thread_data2()
{
cout << "thread 2"<< endl;
}
};

DWORD WINAPI thread_func(LPVOID lpParameter)
{
thread_data *td = (thread_data*)lpParameter;
return 0;
}

DWORD WINAPI thread_func2(LPVOID lpParameter)
{
thread_data2 *td2 = (thread_data2*)lpParameter;
return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
for (int i=0; i< 10; i++)
{
CreateThread(NULL, 0, thread_func, new thread_data() , 0, 0);
CreateThread(NULL, 0, thread_func2, new thread_data2() , 0, 0);
}

system("Pause");
return 0;
}

mafia1990
جمعه 20 دی 1392, 12:11 عصر
CreateThread( NULL,0,(LPTHREAD_START_ROUTINE) thread_func,(LPVOID)arg, NULL,NULL)
ببین حله؟

Collector
جمعه 20 دی 1392, 19:08 عصر
CreateThread( NULL,0,(LPTHREAD_START_ROUTINE) thread_func,(LPVOID)arg, NULL,NULL)
ببین حله؟
نه بازم همون طوریه
برای مشکل اول راه پست اول راه حلی ندارید؟
باید بگرم که کلاس ها داخل dll هستند