求解如何在C++项目中实现对IAsyncAction异步线程的挂起恢复?

li****s4 UID.1046
2017-05-01 发表

自己写了一个简单的跨平台多线程功能封装,UWP方面使用WinRT的ThreadPool::RunAsync和IAsyncAction实现的异步线程,因程序优化需要增加挂起和恢复功能,但自己查官方文档目前还没找到比较好的实现。
请问该如何实现对IAsyncAction异步线程的挂机与恢复?
问了别的网友,他说可以用AutoResetEvent试试,我尝试了一下发现这个是.NETAPI,应该需要/CLR支持,而C++/CX貌似应该是C++Native代码吧,是不是不能直接混用?(我是直接在头文件#using <mscorlib.dll>,编译时报错:错误 C1114 “c:\windows\microsoft.net\framework\v4.0.30319\mscorlib.dll”: WinRT 不支持托管程序集使用#using)
请问如果要使用AutoResetEvent,该如何解决上面的问题?

敬告:
为防止不可控的内容风险,本站已关闭新用户注册,新贴的发表及评论;
你现在看到的内容只是互联网用户曾经发表的言论快照,仅用于老用户留存纪念,且仅与科技行业相关,全部内容不代表本站观点及立场;
本站重新开放前已针对包括用户隐私、版权保护、信息安全、国家政策在内的各种互联网法律法规要求,执行了隐患内容的自查、屏蔽和删除;
本站目前所属个人主体,未有任何盈利安排与计划,且与原WFUN.COM所属公司不存在任何关联关系;
如果本帖内容或者相关资源侵犯到您的合法权益,或者您认为存在问题,那么请您务必点此举报或投诉!
全部回复:
qingqing870812 UID.1166833
2017-05-01 使用 Lumia 950 XL 回复

不懂帮顶

er****ui UID.1020433
2017-05-02 回复

按照基本法吼5吼啊,uwp上用task.run来做线程即可,其他io接口有异步的尽量用异步。另外你说的跨平台是xamarin?还是其他?

風の音 UID.208483
2017-05-02 回复

AutoResetEvent只是 .NET 的一层对win32 API的封装。
对应的win32 API应该是CreateEventEx之类的

tmp00000 UID.995403
2017-05-02 使用 Lumia 950 XL 回复

挂起那种线程非常容易死锁。挂起之后很可能没有机会还原。

tmp00000 UID.995403
2017-05-02 使用 Lumia 950 XL 回复

我之前试过用 Semaphore 限制一个 Task 被同时调用的次数,结果死锁了。

tmp00000 UID.995403
2017-05-02 使用 Lumia 950 XL 回复

调用 .net 只能写好 Windows runtime component 然后让 c++ 引用。

li****s4 UID.1046
2017-05-02 使用 Lumia 650 回复

Quoteericcui 发表于 2017-5-2 00:24
按照基本法吼5吼啊,uwp上用task.run来做线程即可,其他io接口有异步的尽量用异步。另外你说的跨平台是xama ...


要纯按异步做的话,我那个整个资源管理模块(从以前公司部分借鉴来的代码)都要重构,我业余写的代码啊,根本腾不出时间来重构啊亲

li****s4 UID.1046
2017-05-02 使用 Lumia 650 回复

Quoteericcui 发表于 2017-5-2 00:24
按照基本法吼5吼啊,uwp上用task.run来做线程即可,其他io接口有异步的尽量用异步。另外你说的跨平台是xama ...


cocos2d游戏

li****s4 UID.1046
2017-05-02 使用 Lumia 650 回复

希望有人能正面回答一下,有没有能实现的API,有的话具体是哪个,没有的话就说没有好了,大不了全换win32api咯,不要回什么“不要怎么做”之类意思的回复啦亲们。。

li****s4 UID.1046
2017-05-02 使用 Lumia 650 回复

Quote風の音 发表于 2017-5-2 01:22
AutoResetEvent只是 .NET 的一层对win32 API的封装。
对应的win32 API应该是CreateEventEx之类的
...


这个我去看看如何

li****s4 UID.1046
2017-05-02 使用 Lumia 650 回复

Quotetmp00000 发表于 2017-5-2 07:20
调用 .net 只能写好 Windows runtime component 然后让 c++ 引用。


这算是最后不得已的解决方案了吧哈哈

vbfool UID.352791
2017-05-02 回复

推荐你全换Win32吧,如果执意要用的话,大概要找的是createtask

本站使用Golang构建,点击此处申请开源鄂ICP备18029942号-4联系站长投诉/举报