我很想在CPU,MFC C ++上使用多线程。我试图初始化两个CWinThreads并同时作为工作线程运行它们,这里是我的头文件
CWinThread *m_thread;
CWinThread *m_thread1;
在我的cpp文件中,我试图像这样称呼它们
CdecoderD3D9App *decoder_object_1 = new CdecoderD3D9App(460, 1);
m_thread = AfxBeginThread(MainTread, decoder_object_1);
CdecoderD3D9App *decoder_object_2 = new CdecoderD3D9App(460, 2);
m_thread1 = AfxBeginThread(MainTread1, decoder_object_2);
CdecoderD3D9App
是我的app类,我传递给线程并运行其函数我的线程函数是这样的
UINT Ctesting_projectDlg::MainTread(LPVOID pParam)
{
clock_t t1, t2;
t1 = clock();
CdecoderD3D9App *decoder_object_1 = (CdecoderD3D9App *)pParam;
char *video_source = "my_movie.mp4";
decoder_object_1->InitInstance();
decoder_object_1->run_program(video_source);
t2 = clock();
float diff = (((float)t2 - (float)t1) / 1000000.0F ) * 10;
return 0;
}
UINT Ctesting_projectDlg::MainTread1(LPVOID pParam)
{
clock_t t1, t2;
t1 = clock();
CdecoderD3D9App *decoder_object_3 = (CdecoderD3D9App *)pParam;
char *video_source = "my_movie.m2v";
decoder_object_3->InitInstance();
decoder_object_3->run_program(video_source);
t2 = clock();
float diff = (((float)t2 - (float)t1) / 1000000.0F ) * 10;
return 0;
}
当我调用线程函数时,只有第二个线程正在运行,第一个线程开始运行,但是第二个线程在第一个线程停止时调用。无论如何我可以同时运行它们吗? 我必须在程序中同时运行这样的四个线程。谢谢。
答案 0 :(得分:2)
试试这个,
CWinThread *pThread;
pThread = AfxBeginThread (TestStartThread
,param,THREAD_PRIORITY_NORMAL,0,0,NULL);
这里,TestStartThread是函数,param是指向TestStartThread的输入参数的指针。
像这样定义TestStartThread(...),
static UINT TestStartThread (LPVOID param);
根据需要调用TestStartThread静态函数中的函数。
如果您是新人,请参阅http://www.codeproject.com/Articles/14746/Multithreading-Tutorial
答案 1 :(得分:0)
看起来你的工作线程实际上是基于InitInstance和run_program(video_source)的GUI线程。虽然您可以在MFC下技术上拥有多个gui线程,但最好使用单独的进程和一些进程间通信。