线程函数和普通回调函数
typedef void (*p)();
void callback()
{
printf("回调函数里面啦!");
}
void run(p pfun)
{
pfun();
}
int main(int argc, char* argv[])
{
run(callback);
printf("回调函数外面啦!");
return 0;
}
这是普通回调函数,是先执行到“回调函数里面啦”中然后再执行到“回调函数外面啦”,
DWORD CALLBACK callback(LPVOID lparam)
{
printf("回调函数里面啦!");
return 0;
}
int main(int argc, char* argv[])
{
DWORD dwThreadID;
HANDLE hThread = CreateThread(0,0,callback,0,0,&dwThreadID);
CloseHandle(hThread);
printf("回调函数外面啦!");
while (1)
{
}
return 0;
}
第一种场景:执行到run函数的时候,run函数会等待callback函数执行完才往下执行.
第二种场景:线程函数也是回调函数,为什么就有可能先执行到“回调函数外面啦”再执行到“回调函数里面啦”?
我的意思是:A函数里面有个参数是个回调函数B,那么执行A的时候,A会不会等待B执行完再往下执行? 还是它们同时执行?就一句话是不是同时执行的?还是等待回调函数执行完再继续执行?
[解决办法]
第一种场景,在一条线程下执行肯定是顺序的,不管你的函数是不是立即返回的。
第二种场景,两条线程执行顺序无法确定,可能子线程执行完了,才打印printf("回调函数外面啦!");
也可能这条打印在主线程中执行了子线程才开始。
关键要理解这是两条线程在运行,而他们各自的运行规则依然是遵守“第一种场景”的。