首页 / 专利库 / 电脑零配件 / 固件 / 软件 / 一种任务执行方法和装置

一种任务执行方法和装置

阅读:822发布:2023-06-10

专利汇可以提供一种任务执行方法和装置专利检索,专利查询,专利分析的服务。并且本 发明 提供了一种任务执行方法,该方法包括:在第一线程中,通过任务队列函数获取第二线程的句柄;通过任务队列函数创建异步调用参数结构对象,异步调用参数结构对象包括任务成员和事件成员;将第一线程的目标任务的参数赋值给任务成员;创建初始状态为无 信号 的事件对象;将事件对象赋值给事件成员;通过任务队列函数根据第二线程的句柄将异步调用参数结构对象和异步调 用例 行程序函数投递到第二线程;通过任务队列函数调用等待函数来检测事件对象的信号状态;若有信号,任务队列函数执行返回操作;若无信号,任务队列函数再次调用等待函数检测事件对象的信号状态,直到目标任务完成。可以实现将第一线程的目标任务投递到第二线程中执行。,下面是一种任务执行方法和装置专利的具体信息内容。

1.一种任务执行方法,其特征在于,所述方法包括:
在第一线程中,通过任务队列函数调用线程打开函数获取第二线程的句柄;
通过所述任务队列函数创建异步调用参数结构对象,所述异步调用参数结构对象包括任务成员和事件成员;
将所述第一线程的目标任务的参数赋值给所述任务成员;
创建事件对象,所述创建的事件对象的初始状态设置为无信号
将所述事件对象赋值给所述事件成员;
通过所述任务队列函数根据所述第二线程的句柄将所述异步调用参数结构对象和异步调用例行程序函数投递到所述第二线程,所述异步调用例行程序函数用于在所述第二线程中基于所述任务成员执行所述目标任务,并在所述目标任务执行完成后,将所述事件成员中的事件对象设置为有信号;
通过所述任务队列函数调用等待函数来检测所述事件对象的信号状态;
若所述事件对象为有信号,确定所述目标任务已完成,通过所述任务队列函数执行返回操作;
若在预置时间内所述事件对象为无信号,确定所述目标任务未完成,通过所述任务队列函数再次调用所述等待函数检测所述事件对象的信号状态,直到所述目标任务完成。
2.根据权利要求1所述的方法,其特征在于,在所述通过所述任务队列函数调用等待函数来检测所述事件对象的信号状态之前,还包括:
将所述等待函数中表示通知状态的参数设置为已通知状态,以使得所述第一线程处于可唤醒状态。
3.根据权利要求2所述的方法,所述将所述等待函数中表示通知状态的参数设置为已通知状态,包括:
将所述等待函数的最后一个参数设置为true,所述最后一个参数为表示通知状态的参数。
4.根据权利要求1所述的方法,其特征在于,所述通过所述任务队列函数按照所述第二线程的句柄将所述异步调用参数结构对象和异步调用例行程序函数投递到所述第二线程,包括:
通过所述任务队列函数调用排队函数按照所述第二线程的句柄将所述异步调用参数结构对象和异步调用例行程序函数投递到所述第二线程,所述排队函数包括三个参数,第一个参数设置为所述异步调用例行程序函数,第二个参数设置为所述第二线程的句柄,第三个参数设置为所述异步调用参数结构对象。
5.根 据权 利 要 求 1 所述 的 方 法 ,其特 征 在 于 ,所 述等 待 函 数 包 括WaitForSingleObjectEx函数或SleepEx函数。
6.根据权利要求5所述的方法,其特征在于,所述等待函数为WaitForSingleObjectEx函数,所述通过所述任务队列函数调用等待函数来检测所述事件对象的信号状态,包括:
根据所述WaitForSingleObjectEx函数的返回值检测所述事件对象的信号状态;
若所述WaitForSingleObjectEx函数的返回值为WAIT_OBJECT_0,确定所述事件对象为有信号;
若所述WaitForSingleObjectEx函数的返回值为WAIT_IO_COMPLETION,确定所述事件对象为无信号。
7.根据权利要求1-6任一项所述的方法,所述通过所述任务队列函数创建异步调用参数结构对象,包括:
通过所述任务队列函数调用new操作符来创建异步调用参数结构对象。
8.一种任务执行装置,其特征在于,所述装置包括:
获取单元,用于在第一线程中,通过任务队列函数调用线程打开函数获取第二线程的句柄;
创建单元,用于通过所述任务队列函数创建异步调用参数结构对象,所述异步调用参数结构对象包括任务成员和事件成员;
赋值单元,用于将所述第一线程的目标任务的参数赋值给所述任务成员;
所述创建单元还用于创建事件对象,所述创建的事件对象的初始状态设置为无信号;
所述赋值单元还用于将所述事件对象赋值给所述事件成员;
投递单元,用于通过所述任务队列函数根据所述第二线程的句柄将所述异步调用参数结构对象和异步调用例行程序函数投递到所述第二线程,所述异步调用例行程序函数用于在所述第二线程中基于所述任务成员执行所述目标任务,并在所述目标任务执行完成后,将所述事件成员中的事件对象设置为有信号;
检测单元,用于通过所述任务队列函数调用等待函数来检测所述事件对象的信号状态;
返回单元,用于若所述事件对象为有信号,确定所述目标任务已完成,通过所述任务队列函数执行返回操作;
所述检测单元还用于若在预置时间内所述事件对象为无信号,确定所述目标任务未完成,通过所述任务队列函数再次调用所述等待函数检测所述事件对象的信号状态,直到所述目标任务完成。
9.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至权利要求7任一项权利要求所述的方法。
10.一种计算机设备,包括处理器、存储器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至权利要求
7任一项权利要求所述的方法。

说明书全文

一种任务执行方法和装置

技术领域

[0001] 本发明涉及计算机技术领域,尤其涉及一种任务执行方法和装置。

背景技术

[0002] 在windows多线程的程序开发中,由于经常需要结合多线程进行工作,所以就有需要进行跨线程访问,所谓跨线程访问,就是被访问的线程需要为访问线程提供自己的方法,由访问线程来操作该方法,即在访问线程中调用被访问线程的方法来执行访问线程的目标任务。
[0003] 然而,在某些特定功能的线程中,是绝对不能跨线程访问的,否则将引起整个程序的崩溃。例如Direct3D11的设备环境接口ID3D11DeviceContext是不能跨线程访问的,否则很可能引起底层的驱动程序崩溃。

发明内容

[0004] 本发明提供一种任务执行方法和装置,解决了现有技术中,对于不能跨进程访问的线程进行跨线程访问时,将引起的程序崩溃问题。
[0005] 第一方面,本发明实施例提供了一种任务执行方法,所述方法包括:
[0006] 在第一线程中,通过任务队列函数调用线程打开函数获取第二线程的句柄;
[0007] 通过所述任务队列函数创建异步调用参数结构对象,所述异步调用参数结构对象包括任务成员和事件成员;
[0008] 将所述第一线程的目标任务的参数赋值给所述任务成员;
[0009] 创建事件对象,所述创建的事件对象的初始状态设置为无信号
[0010] 将所述事件对象赋值给所述事件成员;
[0011] 通过所述任务队列函数根据所述第二线程的句柄将所述异步调用参数结构对象和异步调用例行程序函数投递到所述第二线程,所述异步调用例行程序函数用于在所述第二线程中基于所述任务成员执行所述目标任务,并在所述目标任务执行完成后,将所述事件成员中的事件对象设置为有信号;
[0012] 通过所述任务队列函数调用等待函数来检测所述事件对象的信号状态;
[0013] 若所述事件对象为有信号,确定所述目标任务已完成,通过所述任务队列函数执行返回操作;
[0014] 若在预置时间内所述事件对象为无信号,确定所述目标任务未完成,通过所述任务队列函数再次调用所述等待函数检测所述事件对象的信号状态,直到所述目标任务完成。
[0015] 可选的,在所述通过所述任务队列函数调用等待函数来检测所述事件对象的信号状态之前,还包括:
[0016] 将所述等待函数中表示通知状态的参数设置为已通知状态,以使得所述第一线程处于可唤醒状态。
[0017] 可选的,所述将所述等待函数中表示通知状态的参数设置为已通知状态,包括:
[0018] 将所述等待函数的最后一个参数设置为true,所述最后一个参数为表示通知状态的参数。
[0019] 可选的,所述通过所述任务队列函数按照所述第二线程的句柄将所述异步调用参数结构对象和异步调用例行程序函数投递到所述第二线程,包括:
[0020] 通过所述任务队列函数调用排队函数按照所述第二线程的句柄将所述异步调用参数结构对象和异步调用例行程序函数投递到所述第二线程,所述排队函数包括三个参数,第一个参数设置为所述异步调用例行程序函数,第二个参数设置为所述第二线程的句柄,第三个参数设置为所述异步调用参数结构对象。
[0021] 可选的,所述等待函数包括WaitForSingleObjectEx函数或SleepEx函数。
[0022] 可选的,所述等待函数为WaitForSingleObjectEx函数,所述通过所述任务队列函数调用等待函数来检测所述事件对象的信号状态,包括:
[0023] 根据所述WaitForSingleObjectEx函数的返回值检测所述事件对象的信号状态;
[0024] 若所述WaitForSingleObjectEx函数的返回值为WAIT_OBJECT_0,确定所述事件对象为有信号;
[0025] 若所述WaitForSingleObjectEx函数的返回值为WAIT_IO_COMPLETION,确定所述事件对象为无信号。
[0026] 可选的,所述通过所述任务队列函数创建异步调用参数结构对象,包括:
[0027] 通过所述任务队列函数调用new操作符来创建异步调用参数结构对象。
[0028] 第二方面,本发明实施例提供了一种任务执行装置,所述装置包括:
[0029] 获取单元,用于在第一线程中,通过任务队列函数调用线程打开函数获取第二线程的句柄;
[0030] 创建单元,用于通过所述任务队列函数创建异步调用参数结构对象,所述异步调用参数结构对象包括任务成员和事件成员;
[0031] 赋值单元,用于将所述第一线程的目标任务的参数赋值给所述任务成员;
[0032] 所述创建单元还用于创建事件对象,所述创建的事件对象的初始状态设置为无信号;
[0033] 所述赋值单元还用于将所述事件对象赋值给所述事件成员;
[0034] 投递单元,用于通过所述任务队列函数根据所述第二线程的句柄将所述异步调用参数结构对象和异步调用例行程序函数投递到所述第二线程,所述异步调用例行程序函数用于在所述第二线程中基于所述任务成员执行所述目标任务,并在所述目标任务执行完成后,将所述事件成员中的事件对象设置为有信号;
[0035] 检测单元,用于通过所述任务队列函数调用等待函数来检测所述事件对象的信号状态;
[0036] 返回单元,用于若所述事件对象为有信号,确定所述目标任务已完成,通过所述任务队列函数执行返回操作;
[0037] 所述检测单元还用于若在预置时间内所述事件对象为无信号,确定所述目标任务未完成,通过所述任务队列函数再次调用所述等待函数检测所述事件对象的信号状态,直到所述目标任务完成。
[0038] 可选的,所述装置还包括:
[0039] 设置单元,用于将所述等待函数中表示通知状态的参数设置为已通知状态,以使得所述第一线程处于可唤醒状态。
[0040] 可选的,所述投递单元具体用于:
[0041] 通过所述任务队列函数调用排队函数按照所述第二线程的句柄将所述异步调用参数结构对象和异步调用例行程序函数投递到所述第二线程,所述排队函数包括三个参数,第一个参数设置为所述异步调用例行程序函数,第二个参数设置为所述第二线程的句柄,第三个参数设置为所述异步调用参数结构对象。
[0042] 可选的,所述等待函数包括WaitForSingleObjectEx函数或SleepEx函数。
[0043] 第三方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现上述任务执行方法的所有步骤。
[0044] 第四方面,本发明实施例提供了一种计算机设备,包括处理器、存储器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现上述任务执行方法的所有步骤。
[0045] 本发明实施例提供的任务执行方法包括:在第一线程中,通过任务队列函数调用线程打开函数获取第二线程的句柄;通过所述任务队列函数创建异步调用参数结构对象,所述异步调用参数结构对象包括任务成员和事件成员;将所述第一线程的目标任务的参数赋值给所述任务成员;创建事件对象,所述创建的事件对象的初始状态设置为无信号;将所述事件对象赋值给所述事件成员;通过所述任务队列函数根据所述第二线程的句柄将所述异步调用参数结构对象和异步调用例行程序函数投递到所述第二线程,所述异步调用例行程序函数用于在所述第二线程中基于所述任务成员执行所述目标任务,并在所述目标任务执行完成后,将所述事件成员中的事件对象设置为有信号;通过所述任务队列函数调用等待函数来检测所述事件对象的信号状态;若所述事件对象为有信号,所述任务队列函数确定所述目标任务已完成,执行返回操作;若在预置时间内所述事件对象为无信号,确定所述目标任务未完成,所述任务队列函数再次调用所述等待函数检测所述事件对象的信号状态,直到所述目标任务完成。本发明实施例可以将第一线程的目标任务投递到第二线程中执行,解决了现有技术中,对于不能跨进程访问的线程进行跨线程访问时,将引起的程序崩溃问题。
[0046] 上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。附图说明
[0047] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0048] 图1为本申请实施例中任务执行方法的流程图
[0049] 图2为本申请实施例中任务执行装置的结构示意图;
[0050] 图3为本申请实施例中计算机设备的结构示意图;
[0051] 图4为本申请实施例中计算机可读存储介质的结构示意图。

具体实施方式

[0052] 本发明实施例提的供一种用于任务执行方法及装置,可以将第一线程的目标任务投递到第二线程中执行,解决了现有技术中,对于不能跨进程访问的线程进行跨线程访问时,将引起的程序崩溃问题。
[0053] 本发明实施例中的技术方案,总体思路如下:
[0054] 在第一线程中,通过任务队列函数调用线程打开函数获取第二线程的句柄;通过所述任务队列函数创建异步调用参数结构对象,所述异步调用参数结构对象包括任务成员和事件成员;将所述第一线程的目标任务的参数赋值给所述任务成员;创建事件对象,所述创建的事件对象的初始状态设置为无信号;将所述事件对象赋值给所述事件成员;通过所述任务队列函数根据所述第二线程的句柄将所述异步调用参数结构对象和异步调用例行程序函数投递到所述第二线程,所述异步调用例行程序函数用于在所述第二线程中基于所述任务成员执行所述目标任务,并在所述目标任务执行完成后,将所述事件成员中的事件对象设置为有信号;通过所述任务队列函数调用等待函数来检测所述事件对象的信号状态;若所述事件对象为有信号,所述任务队列函数确定所述目标任务已完成,执行返回操作;若在预置时间内所述事件对象为无信号,确定所述目标任务未完成,所述任务队列函数再次调用所述等待函数检测所述事件对象的信号状态,直到所述目标任务完成。本发明通过将第一线程的目标任务投递到第二线程中执行,解决了现有技术中,对于不能跨进程访问的线程进行跨线程访问时,将引起的程序崩溃问题。
[0055] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0056] 本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
[0057] 实施例一
[0058] 本发明实施例一提供一种任务执行方法,请参考图1,所述方法包括:
[0059] S101、在第一线程中,通过任务队列函数调用线程打开函数获取第二线程的句柄。
[0060] 在Windows操作系统中,每个线程都有自己的APC(Asynchronous Procedure Call,异步过程调用)队列,任何其他的线程可以调用排队函数QueueUserAPC将一个任务投递到该线程中。其中,排队函数QueueUserAPC的功能就是把一个APC对象加入到指定线程的APC队列中;若线程处于可唤醒状态,那么该线程就会执行APC队列中的所有任务。基于此,本实施例创建了任务队列函数QueueTaskUntilComplete,用于实现第一线程将目标任务投递到第二线程中执行,具体的,该任务队列函数的原型如下:
[0061] bool QueueTaskUntilComplete(int targetThreadId,const TaskRunCallback&cb)
[0062] 其中,targetThreadId参数表示第二线程的线程id,cb参数表示第一线程的目标任务,该函数把目标任务cb投递到第二线程targetThreadId中,并且需要等待目标任务执行完成后,该函数才返回。
[0063] 当第一线程调用任务队列函数实现将目标任务投递到第二线程中执行的过程中,先通过任务队列函数调用线程打开函数OpenThread,由该函数根据targetThreadId获取第二线程的句柄hThread。若不成功,OpenThread函数返回false并退出,若成功,继续执行步骤S102。
[0064] S102、通过所述任务队列函数创建异步调用参数结构对象,所述异步调用参数结构对象包括任务成员和事件成员。
[0065] 具体的,所述任务队列函数通过调用new操作符,创建一个异步调用参数结构对象ApcParameter,该异步调用参数结构对象ApcParameter包括任务成员和事件成员,即cb成员和hEvent成员。
[0066] S103、将所述第一线程的目标任务的参数赋值给所述任务成员。
[0067] 具体的,目标任务的参数为完成该目标任务需要用到的参数。
[0068] S104、创建事件对象,所述创建的事件对象的初始状态设置为无信号。
[0069] 具体的,调用创建事件函数CreateEvent,创建一个事件对象,将该事件对象的初始状态设置为无信号,具体实现如下:
[0070] CreateEvent(NULL,FALSE,FALSE,NULL)
[0071] S105、将所述事件对象赋值给所述事件成员。
[0072] 其中,事件成员中的事件对象用于判断目标任务是否完成,若事件对象为无信号,表示目标任务未完成,若事件对象为有信号,表示目标任务已完成。
[0073] S106、通过所述任务队列函数根据所述第二线程的句柄将所述异步调用参数结构对象和异步调用例行程序函数投递到所述第二线程。
[0074] 具体的,调用排队函数QueueUserAPC根据第二线程的句柄hThread,将异步调用参数结构对象apc以及异步调用例行程序函数ApcRoutine投递到第二线程中。所述排队函数包括三个参数,第一个参数设置为所述异步调用例行程序函数,第二个参数设置为所述第二线程的句柄,第三个参数设置为所述异步调用参数结构对象,具体的实现如下:
[0075] QueueUserAPC(ApcRoutine,hThread,apc)
[0076] 其中,异步调用例行程序函数用于在所述第二线程中基于所述任务成员执行所述目标任务,并在所述目标任务执行完成后,将所述事件成员中的事件对象设置为有信号。
[0077] S107、通过所述任务队列函数调用等待函数来检测所述事件对象的信号状态。
[0078] 等待函数包括WaitForSingleObjectEx函数或SleepEx函数。其中,SleepEx函数可以用来中止当前线程运行直到指定的条件被触发;WaitForSingleObject函数可以用来检测hHandle事件的信号状态,在某一线程中调用该函数时,线程暂时挂起,如果在挂起的预置时间内,线程所等待的对象变为有信号状态,则该函数立即返回;如果超时时间已经到达预置时间,但hHandle所指向的对象还没有变成有信号状态,函数照样返回。
[0079] 进一步的,等待函数中表示通知状态的参数可以设置为已通知状态,具体的,可以将等待函数的最后一个参数设置为true,以使得第一线程处于可唤醒状态。当第一线程处于可唤醒状态,若其他线程向第一线程投递任务,第一线程仍然可以执行该任务,否则第一线程处于挂起状态,不会执行任何任务。这样就可以避免第一线程在等待第二线程完成目标任务的同时,若第二线程调用任务队列函数QueueTaskUntilComplete向第一线程投递任务,由于第一线程在等待第二线程,而第二线程又投递任务到第一线程,两个线程都在互相等待对方先完成任务,从而导致死的情况。
[0080] S108、若所述事件对象为有信号,确定所述目标任务已完成,所述任务队列函数执行返回操作。
[0081] 具体的,以等待函数为WaitForSingleObjectEx函数为例,若等待函数检测到事件成员为有信号,则返回WAIT_OBJECT_0,任务队列函数根据所述等待函数的返回值为WAIT_OBJECT_0,确定所述目标任务已完成,所述任务队列函数执行返回操作。具体的,任务队列函数将第二线程执行目标任务的结果返回给第一线程。
[0082] S109、若在预置时间内所述事件对象为无信号,确定所述目标任务未完成,所述任务队列函数再次调用所述等待函数检测所述事件对象的信号状态,直到所述目标任务完成。
[0083] 同样的,以等待函数为WaitForSingleObjectEx函数为例,当等待函数在预置时间内未检测到事件成员有信号,则返回WAIT_IO_COMPLETION,任务队列函数根据所述等待函数的返回值为WAIT_IO_COMPLETION,确定所述目标任务未完成,未完成的原因有可能为目标任务正在执行中暂未完成,或者第二线程在执行其他任务,目标任务还在队列中等待被处理等。由于等待函数已经返回,所以任务队列函数需要再次调用等待函数检测所述事件对象的信号状态,直到所述目标任务完成。
[0084] 本实施例中,在第一线程中,通过任务队列函数调用线程打开函数获取第二线程的句柄;通过所述任务队列函数创建异步调用参数结构对象,所述异步调用参数结构对象包括任务成员和事件成员;将所述第一线程的目标任务的参数赋值给所述任务成员;创建事件对象,所述创建的事件对象的初始状态设置为无信号;将所述事件对象赋值给所述事件成员;通过所述任务队列函数根据所述第二线程的句柄将所述异步调用参数结构对象和异步调用例行程序函数投递到所述第二线程,所述异步调用例行程序函数用于在所述第二线程中基于所述任务成员执行所述目标任务,并在所述目标任务执行完成后,将所述事件成员中的事件对象设置为有信号;通过所述任务队列函数调用等待函数来检测所述事件对象的信号状态;若所述事件对象为有信号,所述任务队列函数确定所述目标任务已完成,执行返回操作;若在预置时间内所述事件对象为无信号,确定所述目标任务未完成,所述任务队列函数再次调用所述等待函数检测所述事件对象的信号状态,直到所述目标任务完成。本实施例可以将第一线程的目标任务投递到第二线程中执行,解决了现有技术中,对于不能跨进程访问的线程进行跨线程访问时,将引起的程序崩溃问题。
[0085] 进一步的,本实施例中,通过将等待函数中表示通知状态的参数可以设置为已通知状态,以使得第一线程处于可唤醒状态,可以避免线程死锁。
[0086] 基于同一发明构思,本发明实施例还提供了与实施例一中方法对应的装置,见实施例二。
[0087] 实施例二
[0088] 本发明实施例二提供了一种任务执行装置,请参考图2,所述装置包括:
[0089] 获取单元201,用于在第一线程中,通过任务队列函数调用线程打开函数获取第二线程的句柄;
[0090] 创建单元202,用于通过所述任务队列函数创建异步调用参数结构对象,所述异步调用参数结构对象包括任务成员和事件成员;
[0091] 赋值单元203,用于将所述第一线程的目标任务的参数赋值给所述任务成员;
[0092] 所述创建单元202还用于创建事件对象,所述创建的事件对象的初始状态设置为无信号;
[0093] 所述赋值单元203还用于将所述事件对象赋值给所述事件成员;
[0094] 投递单元204,用于通过所述任务队列函数根据所述第二线程的句柄将所述异步调用参数结构对象和异步调用例行程序函数投递到所述第二线程,所述异步调用例行程序函数用于在所述第二线程中基于所述任务成员执行所述目标任务,并在所述目标任务执行完成后,将所述事件成员中的事件对象设置为有信号;
[0095] 检测单元205,用于通过所述任务队列函数调用等待函数来检测所述事件对象的信号状态;
[0096] 返回单元206,用于若所述事件对象为有信号,确定所述目标任务已完成,通过所述任务队列函数执行返回操作;
[0097] 所述检测单元205还用于若在预置时间内所述事件对象为无信号,确定所述目标任务未完成,通过所述任务队列函数再次调用所述等待函数检测所述事件对象的信号状态,直到所述目标任务完成。
[0098] 在一些可能的实现方式中,所述装置还包括:
[0099] 设置单元,用于将所述等待函数中表示通知状态的参数设置为已通知状态,以使得所述第一线程处于可唤醒状态。
[0100] 在一些可能的实现方式中,所述投递单元204具体用于:
[0101] 通过所述任务队列函数调用排队函数按照所述第二线程的句柄将所述异步调用参数结构对象和异步调用例行程序函数投递到所述第二线程,所述排队函数包括三个参数,第一个参数设置为所述异步调用例行程序函数,第二个参数设置为所述第二线程的句柄,第三个参数设置为所述异步调用参数结构对象。
[0102] 在一些可能的实现方式中,所述等待函数包括WaitForSingleObjectEx函数或SleepEx函数。
[0103] 本实施例中,在第一线程中,获取单元201通过任务队列函数调用线程打开函数获取第二线程的句柄;创建单元202通过所述任务队列函数创建异步调用参数结构对象,所述异步调用参数结构对象包括任务成员和事件成员;赋值单元203将所述第一线程的目标任务的参数赋值给所述任务成员;创建单元202创建事件对象,所述创建的事件对象的初始状态设置为无信号;所述赋值单元203将所述事件对象赋值给所述事件成员;投递单元204通过所述任务队列函数根据所述第二线程的句柄将所述异步调用参数结构对象和异步调用例行程序函数投递到所述第二线程,所述异步调用例行程序函数用于在所述第二线程中基于所述任务成员执行所述目标任务,并在所述目标任务执行完成后,将所述事件成员中的事件对象设置为有信号;检测单元205通过所述任务队列函数调用等待函数来检测所述事件对象的信号状态;若所述事件对象为有信号,返回单元206确定所述目标任务已完成,通过所述任务队列函数执行返回操作;若在预置时间内所述事件对象为无信号,检测单元205确定所述目标任务未完成,通过所述任务队列函数再次调用所述等待函数检测所述事件对象的信号状态,直到所述目标任务完成。本实施例可以将第一线程的目标任务投递到第二线程中执行,解决了现有技术中,对于不能跨进程访问的线程进行跨线程访问时,将引起的程序崩溃问题。
[0104] 由于本发明实施例二所介绍的装置,为实施本发明实施例一的任务执行方法所采用的装置,故而基于本发明实施例一所介绍的方法,本领域所属人员能够了解该装置的具体结构及变形,故而在此不再赘述。凡是本发明实施例一的方法所采用的装置都属于本发明所欲保护的范围。
[0105] 实施例三
[0106] 基于同一发明构思,本实施例提供了一种计算机设备300,如图3所示,包括存储器310、处理器320及存储在存储器310上并可在处理器320上运行的计算机程序311,处理器
320执行计算机程序311时,可以实现上述实施例一的所有步骤,故而在此不再赘述。
[0107] 实施例四
[0108] 基于同一发明构思,本实施例提供一种计算机可读存储介质400,如图4所示,其上存储有计算机程序411,该计算机程序411被处理器执行时,可以实现上述实例一的所有步骤,故而在此不再赘述。
[0109] 本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0110] 本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0111] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0112] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0113] 尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
[0114] 显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈