尝试在C ++中创建基本的ThreadManager时出错

时间:2013-01-06 23:40:41

标签: c++ multithreading

我可能已经编写了很多年,但我想在C ++中创建一个非常基本的线程管理器来实现我的想法。我遇到了一个问题,我遇到了这个错误:

  

ThreadManager.cpp:49:37:错误:无法转换   类型'DWORD(ThreadManager ::)(LPVOID)中的'ThreadManager :: updateLoop'   {aka long unsigned int(ThreadManager ::)(void *)}'来键入   'LPTHREAD_START_ROUTINE {aka long unsigned int   (属性(( stdcall )))(void )}'

然而,我不知道如何尝试修复它。这是我的代码,我无法弄清楚如何使用格式将其粘贴到此处。它说我每行需要4个空格,但这似乎需要一段时间,所以我把它放在pastebin上:

ThreadManager.cpp:http://pastebin.com/2bL3mTqv

ThreadManager.h:http://pastebin.com/7xETj5BK

就像我说的那样,我没有很长时间的编程,而我正试图用我记得的东西重新进入它,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

评论已经说了基础知识,但是这里拼写出来:当一个调用期望一个正常的函数时,你不能将一个方法传递给一个类。为了做你想做的事,我会做以下事情:

// New Function
void threadMain(void* classPointer)
{
    ThreadManager* realClass = (ThreadManager*)classPointer;
    realClass->updateLoop();
}

ThreadManager::ThreadManager(int max)
{
    // Assign maxThreads to max value
    maxThreads = max;

    // Start updateThread, and let it run updateLoop() until terminated
    updateThread = CreateThread(
                                NULL,       // default security attributes
                                0,          // use default stack size
                                threadMain, // thread function name
                                this,          // argument to thread function
                                0,          // use default creation flag
                                NULL);      // ignore thread identifier

    // Check the return value for success
    // If failed, exit process.
    if (updateThread == NULL) {
        ExitProcess(3);
    }      
}

现在我知道你想要一个额外的参数,所以可能使用std :: tuple传入“this”指针以及你真正想要的任何额外参数。

现在已经说了所有这些,接受其他人的建议并使用std::thread等,而不是特定于win32的调用,除非你真的需要。