0

我可能有几年没有编写太多代码了,我想用 C++ 制作一个非常基本的线程管理器,以实现我的想法。我遇到了一个问题,我收到此错误:

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

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

线程管理器.cpp:http : //pastebin.com/2bL3mTqv

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

就像我说的,我很久没有编程了,我正试图用我记得的东西重新开始,所以任何帮助都将不胜感激。

4

1 回答 1

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 的调用。

于 2013-01-06T23:56:57.900 回答