c++ - 在 MFC C++ 中使用多线程

标签 c++ multithreading visual-studio-2010 mfc

我不熟悉在 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 是我的应用程序类,我将其传递给线程并运行其函数,我的线程函数如下

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;
}

当我调用线程函数时,只有第二个线程正在运行,第一个线程开始运行,但一旦第二个线程被调用,第一个线程就会停止。无论如何,我可以同时运行它们吗? 我必须在程序中同时运行四个这样的线程。谢谢。

最佳答案

试试这个,

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

关于c++ - 在 MFC C++ 中使用多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18716569/

相关文章:

c++ - 从分配在堆栈上的对象指针 vector 中删除一个元素

c# - ConfigureAwait(false) 维护线程身份验证,但默认情况下它不会

java - 我可以在 Android 的 2 个 OpenGL 上下文之间共享外部纹理吗

java - ReentrantReadWriteLock - 在 if - else block 中锁定/释放

c++ - 如何在 Visual Studio 的 CMake 中获取当前配置(发布/调试)

visual-studio-2010 - CLR/CLI 链接器失败并显示错误 LNK2022 - 自定义属性不一致

c++ - 如何将枚举返回值转换为 C++ 异常?

c++ - EXC_BREAKPOINT 崩溃的原因

c++ - 如何将 vector 大小与整数进行比较?

c# - 时间测量 CUDA 和 C#