首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

线程函数跟普通回调函数

2013-07-16 
线程函数和普通回调函数typedef void (*p)()void callback(){printf(回调函数里面啦!)}void run(p pfu

线程函数和普通回调函数


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("回调函数外面啦!");
也可能这条打印在主线程中执行了子线程才开始。

关键要理解这是两条线程在运行,而他们各自的运行规则依然是遵守“第一种场景”的。

热点排行