如何写一个“异步函数”
1个回答
展开全部
我们平常编程写的函数 几乎都是同步调用函数,那么我们如何写一个异步执行的函数呢?!我想这个问题也许是哪些比较喜欢专研的程序员或者具有专研精神的人士回提出的问题吧!我们很多人已经习惯了windows系统提供的一些异步机制,使用这些异步机制我们很快的就能实现一些异步操作甚至可以很容易的实现一个异步执行的函数;但是我们研究过实现一个“异步函数”的本质吗?!
在单线程的系统中,所以的指令执行都是顺序执行的,这就暗示了如果一个函数A中调用了函数B,则A必须等到B执行后才能继续执行A中剩下的代码。
在多线程中,如果我们有一个threadA线程,在该线程中调用了一个函数C,而该C函数我们想将它实现成异步执行的,而异步执行必须要有多线程支持;如果我们在Windows中编写程序,创建一个线程是很简单只要使用
HANDLE WINAPI CreateThread(
__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in SIZE_T dwStackSize,
__in LPTHREAD_START_ROUTINE lpStartAddress,
__in_opt LPVOID lpParameter,
__in DWORD dwCreationFlags,
__out_opt LPDWORD lpThreadId);
函数就可以创建一个线程。
那么我们按如下方式可以实现一个异步的FuncC函数:
(1)先把你要异步完成的工作单独写成要给函数,如
DWORD WINAPI AsyncronousThread(
LPVOID lpParameter // thread data){
.....}(2)在函数FuncC中使用CreateThtread函数将(1)中的函数创建一成一个线程,然后直接返回。
CreateThread(....,AsyncronousThread,...);return;}当然,写一个异步函数的方法很多,但是一个本质不会变,就是必须要依据多线程才能实现。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询