我们有一个非常高性能的多任务处理,近乎实时的C#应用程序.这种性能主要通过在内部与本土调度程序一起实施协作式多任务处理来实现.这通常被称为微线程.在该系统中,所有任务都通过队列与其他任务进行通信.
我们所遇到的具体问题似乎只能通过C#不支持的一流延续来解决.
具体而言,问题出现在处理队列的2个案例中.每当任何特定任务在将项目放入队列之前执行某些工作时.如果队列已满,该怎么办?
相反,一个不同的任务可能会做一些工作,然后需要从队列中取出一个项目.如果那个队列是空的怎么办?
我们已经在90%的情况下通过将队列链接到任务来解决这个问题,以避免在任何出站队列已满或入站队列为空时调用任务.
此外,某些任务被转换为状态机,因此如果队列已满/空,它们可以处理并继续而无需等待.
真正的问题出现在一些边缘情况下,其中任何一种解决方案都是不切实际的.在这种情况下的想法是在该点保存堆栈状态并切换到另一个任务,以便它可以完成工作,并随后在能够继续时重试等待任务.
在过去,我们尝试将等待任务调用回调度(递归)以允许其他任务以及稍后重试等待任务.然而,这导致了太多的"僵局"情况.
有一个自定义CLR主机的示例,使.NET线程实际上作为"光纤"运行,这实际上允许在线程之间切换堆栈状态.但现在我似乎无法找到任何示例代码.此外,似乎需要一些重要的复杂性才能做到正确.
有没有人有任何其他创意,如何有效地切换任务,避免上述问题?
是否有其他CLR主机提供此商业或其他?是否有任何附加本机库可以为C#提供某种形式的延续?
我正在寻找正确的方法/结构来创建一个循环Thread/Task...
原因是,我需要每15秒检查一次数据库以获取报告请求.
这是我到目前为止所尝试的,但我得到OutOfMemoryException:
private void ViewBase_Loaded(object sender, RoutedEventArgs e)
{
//On my main view loaded start thread to check report requests.
Task.Factory.StartNew(() => CreateAndStartReportRequestTask());
}
private void CreateAndStartReportRequestTask()
{
bool noRequest = false;
do
{
//Starting thread to Check Report Requests And Generate Reports
//Also need the ability to Wait/Sleep when there are noRequest.
reportRequestTask = Task.Factory.StartNew(() => noRequest = CheckReportRequestsAndGenerateReports());
if (noRequest)
{
//Sleep 15sec
reportRequestTask.Wait(15000);
reportRequestTask = null;
}
else
{
if (reportRequestTask.IsCompleted)
{ …Run Code Online (Sandbox Code Playgroud) 我想找到一种方法来查看在前台运行的应用程序,或者当我的应用程序显示本地通知时是否显示主屏幕.例如,如果有主屏幕或其他应用程序,我想要有不同的操作.我尝试使用已处理和pid,但是应用程序启动时会生成pid,而不是最后一次使用应用程序.任何的想法?谢谢
我读到Linux内核是先发制人的,这与大多数Unix内核不同.那么,核心先发制人意味着什么呢?
一些类比或例子比纯粹的理论解释更好.
您可能都知道iOS会在将应用程序投射到后台之前对其进行屏幕截图.这通常是为了获得更好的用户体验,例如快速动画来恢复应用程序等等.我不希望我的应用程序屏幕截图存储在设备上,但我希望多任务仍然存在.
我提出了一个解决方案,但我不确定我是否朝着正确的方向前进.因此,当applicationDidEnterBackground调用时 - 我放入了一个将由操作系统捕获的叠加图像,一旦应用程序进入前景,我将删除叠加层.我不确定这是否会起作用,但我正在实现这一目标.同时,对此的任何其他想法将帮助我找出攻击此问题的最佳方式.
最近在接受采访时,我得到了这个问题.
问:您是否编写过多线程应用程序?
答:是的
问:关心解释更多?
答:我用Tasks(任务并行库)来执行一些任务waiting for some info from internet while loading UI.这提高了我的应用程序可用性.
问:但是,您是否已经使用过TPL手段来编写multithreaded应用程序?
我:(不知道该说些什么1)
那么,什么是多线程应用程序呢?它与使用不同Tasks吗?
c# multithreading .net-4.0 multitasking task-parallel-library
我的团队正在开发一套用于条形码扫描,ID扫描和OCR的SDK .我们使用设备的相机AVCaptureSession来获取我们执行处理的视频帧.
我们正在探索新的iOS 9多任务处理功能Slide Over和Split View.
Apple建议选择退出这些功能,以相机为中心的应用程序,其中使用整个屏幕进行预览和快速捕捉片刻是一个主要功能(参考).这是他们的示例应用程序AVCam中使用的方法.
但是,我们的客户可能拥有不属于此类别的应用程序(例如移动银行应用程序),因此我们无法强制他们选择退出,而是需要处理SDK中的新功能.我们正在探索最好的方法,因为目前的文档并没有真正告诉我们该做什么.
我们使用简单的Camera示例应用程序来分析用例.该示例应用程序可在Github上获得,它是从iOS 9 Beta 5开发的.
从示例应用程序中,可以清楚地看到使用"幻灯片放映"时以及使用"拆分视图"时发生的系统事件.
UIApplicationWillResignActiveNotification和AVCaptureSessionDidStopRunningNotificationUIApplicationWillEnterForegroundNotification和AVCaptureSessionDidStopRunningNotification之后立即UIApplicationWillResignActiveNotification.AVCaptureSessionDidStopRunningNotification因此,根据经验,AVCaptureSession当使用"幻灯片放大"或"拆分视图"时,它会立即停止.
令人困惑的是UIImagePickerController,我们的示例应用程序也支持它,表现出完全不同的行为.
UIImagePickerController当应用程序进入幻灯片放映/拆分视图时,它不会停止,而是完全正常运行.通常可以在Split View中拍照.实际上,两个应用程序(两者都存在UIImagePickerController)可以并行工作,UIImagePickerController活动应用程序处于活动状态.(你可以通过运行我们的示例应用程序和联系人应用程序 - >新联系人 - >添加照片来尝试
考虑到这一切,我们的问题如下:
如果AVCaptureSession在使用"幻灯片放大"和"拆分视图"时立即暂停,是否最好监控AVCaptureSessionDidStopRunningNotification并向用户显示"Camera Paused"消息,以便他清楚地知道应用程序没有执行扫描?
为什么行为UIImagePickerController不同AVCaptureSession?
我们可以期待Apple比未来beta版本的AVCaptureSession变化行为更符合UIImagePickerController吗?
只是我遇到的一个问题 - 我有一个SKScene,我在其中使用SKAction类方法播放声音fx
[SKAction playSoundFileNamed:@"sound.wav" waitForCompletion:NO];
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试去背景时,无论声音结束,显然iOS正在终止我的应用程序gpus_ReturnNotPermittedKillClient.
现在只有当我评论这一行并且没有运行动作时,iOS才能在后台运行它(当然,暂停,但没有终止).
我究竟做错了什么?
编辑:如果没有运行,iOS将不会终止应用程序 - 例如,如果它if statement没有运行(soundOn == YES)或类似的东西,当布尔是false
iOS 9为iPad引入了幻灯片和分割视图.如何在iPad模拟器上模拟这些功能?我试过在iPad Air 2模拟器上向右滑动.
我正在尝试测试我的应用程序在"新近"启动时以及从多任务状态启动时的启动状态.在iPad上,用户可以双击"主页"按钮两次以显示多任务栏,然后您可以关闭不再需要运行的所有应用程序.
这曾经很简单,以前版本的模拟器实际上有一个主页按钮,但现在它没有.要进入主屏幕,您必须转到模拟器 - >硬件 - >主页,并且没有列出模拟双击它的选项.
我错过了什么吗?或者,如果在iPad模拟器中启动的应用程序没有完全删除它们,就不再能够杀死正在运行的应用程序.如果每次我做一个更改来测试我的应用程序的这一部分,每次都不必将应用程序推送到我的物理iPad,我会很棒.
multitasking ×10
ios ×5
c# ×3
ipad ×3
.net ×2
iphone ×2
.net-4.0 ×1
audio ×1
camera ×1
foreground ×1
ios9 ×1
linux ×1
linux-kernel ×1
opengl-es ×1
queue ×1
splitview ×1
sprite-kit ×1