C++ C++;从不同线程调用回调的函数

C++ C++;从不同线程调用回调的函数,c++,multithreading,callback,C++,Multithreading,Callback,我有以下结构: async.h }) async.cpp 然后我调用在不同线程中执行的async::pro: thrd_create(&t, jmmvAsync::pro, (void*)mParams); 一切正常。当CopyFileEx函数将定义的函数调用为回调函数时,就会出现问题。它们位于不同的线程中,因此会产生运行时错误。如何修复此问题,以便CopyFileEx可以调用其回调?在CopyFileEx中,MyCopyProgressRoutine之后的参数对于进度例程(代码中的M

我有以下结构:

async.h

})

async.cpp

然后我调用在不同线程中执行的
async::pro

thrd_create(&t, jmmvAsync::pro, (void*)mParams);

一切正常。当
CopyFileEx
函数将定义的函数调用为回调函数时,就会出现问题。它们位于不同的线程中,因此会产生运行时错误。如何修复此问题,以便
CopyFileEx
可以调用其回调?

在CopyFileEx中,MyCopyProgressRoutine之后的参数对于进度例程(代码中的MyCopyProgressRoutine)的某些数据无效*。您可以调用CopyFileEx并将用于显示进度的两个不同数据实例传递给它。 总而言之:您将有相同的回调,但它将作用于不同的数据

DWORD CALLBACK MyCopyProgressRoutine(LARGE_INTEGER fileSize, LARGE_INTEGER bytesTransferred, LARGE_INTEGER StreamSize, LARGE_INTEGER streamBytestransferred, DWORD dwStreamNumber,  DWORD dwCallbackReason, HANDLE hSourceFile,  HANDLE hDestinationFile, LPVOID lpData){

...
... 
    return  PROGRESS_CONTINUE;
}

int async::pro(void * aArgs){

    CopyFileEx(file, target, &MyCopyProgressRoutine, NULL, NULL, COPY_FILE_FAIL_IF_EXISTS);

    return 0;
}
thrd_create(&t, jmmvAsync::pro, (void*)mParams);