我正在开发一个Web应用程序,它需要立即清除过期的缓存元素.我想使用Quartz框架执行此操作,并有一个单独的工作来参与此操作.
现在,我在其他项目中使用了Quartz,并且通常使用contextInitialised(ServletContextEvent sce)和contextDestroyed(ServletContextEvent sce)从ServletContextListener安排所有作业.但是,我这样做了,因为我曾经读过的教程是这样做的.
我不确定我是否可以从servlet的init()和destroy()方法中安排任务?我想有人可能会说我现在正在混合后台任务和servlet,从而有责任,但是我想听听是否有"最佳实践"?
Export to Excel由于数据库事务繁重,当我点击我的应用程序中的链接时出现超时错误问题.我想将此功能更改为后台,以便用户能够在后台进程运行时继续前进.我希望当用户点击Export to Excel链接后台/新线程进程运行时,会向用户发送一封电子邮件,其中包含下载文件的链接.我想知道哪个是实现这个创建新线程或后台进程的最佳方法?
提前致谢
我必须创建一个java程序,当用户输入0时它应该退出.用java代码编写没问题.
int cmd = read();
System.out.println("got command : " + cmd);
if (cmd == 48) { // ASCII code for 0
System.exit(0);
Run Code Online (Sandbox Code Playgroud)
我想在linux中使用start-stop脚本运行这个过程.我也可以使用&或者那样做nohup
case "$1" in
'start')
if [ -f myfifo ]; then
rm myfifo
fi
mkfifo myfifo
cat > myfifo &
echo $! > myfifo-cat-pid
java -jar myjar.jar >/dev/null 2>&1 0<myfifo &
echo "Started process: "$!
;;
'stop')
echo 0 > myfifo
echo "Stopped process: "
rm myfifo
;;
esac
Run Code Online (Sandbox Code Playgroud)
我的问题是,只要我运行此过程,它就会读取输入-1.虽然我想从stdinput中读取somthing明确地回显它,即调用stop.我只需要一个程序由shell脚本显式关闭.我努力了.帮我.
编辑:
我只想在用户按q或任何此类事件时关闭程序,并且不希望代码中出现无限循环.如果可能的话,任何其他方法如听其他事件也会有所帮助.我的代码不应该轮询事件.我已经尝试过Jnotify监视目录并在该目录中创建或删除文件时引发事件.但运气不好,他们不支持SunOS.:(
我在iOS上实现了一个计步器.一个重要的要求是,即使应用程序处于后台模式(例如,设备被锁定或用户按下主页按钮),它也必须工作.您可以在App Store中看到这样的实现,如Nike +,Runtastic Pedometer等.
一些SO帖子证实,这可以通过Core Motion实现,或者特别是CMMotionManager具有Required background modes设置为的附加属性location.
我使用下面的代码进行了快速测试,发现了一个奇怪的问题:
// AppDelegate.m
- (void)applicationDidEnterBackground:(UIApplication *)application
{
if(self.motionManager==nil) {
self.motionManager=[[CMMotionManager alloc] init];
}
self.motionManager.accelerometerUpdateInterval=1/50;
if(self.accelerometerReadings==nil)
self.accelerometerReadings=[[NSMutableArray alloc] init];
[self.motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
[self.accelerometerReadings addObject:accelerometerData];
});
}
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSLog(@"The number of readings %d",self.accelerometerReadings.count);
// do something with accelerometer data...
}
Run Code Online (Sandbox Code Playgroud)
我用iPhone 4S和iOS 6.1试过这段代码.当应用程序启动时,我按下主页按钮并摇动它(模拟行走)5秒钟,然后再次打开应用程序.这些动作重复了几次.我得到的输出是:
2013-02-05 16:41:42.028 [1147:907] readings 0
2013-02-05 16:41:51.572 [1147:907] readings 444
2013-02-05 16:42:00.386 [1147:907] readings …Run Code Online (Sandbox Code Playgroud) accelerometer background-process ios core-motion cmmotionmanager
我有一个应用程序,我想每周更新徽章图标.我看到至少在iOS7之前,UILocalNotification只能将徽章图标设置为特定的数字
someLocalNotification.applicationIconBadgeNumber = 42;
Run Code Online (Sandbox Code Playgroud)
但我希望我的应用程序在后台加载,让我们说每个星期天,根据当前日期和某个开始日期之间的差异进行计算,并相应地更新徽章编号.
UILocalNotification显然无法做到这一点.它看起来像推送通知,但我没有这个应用程序的服务器组件,所以使用它作为一种解决方法是行不通的,我不确定Apple是否会喜欢它.
我知道iOS7中有一些后台应用刷新更新,但我不确定它们是否适用于这种情况.
TLDR:如何在iOS7中更新徽章图标,需要进行一些计算以获得正确的数字,每周(或任意长时间)?我想在没有服务器组件的情况下进行后台更新.
使用c#,VS 2013
尝试将一些后台任务添加到我的商店应用程序(如果我的Json文件中的某些数据包含当前日期和时间,则显示toast的想法).
做了什么:
1. 创建Windows运行时组件,实现IBackgroundTask,添加对我的Windows应用商店应用的引用.在WRC内部创建包含下一个代码的类:
namespace BackgroundTask
{
public sealed class EventChecker: IBackgroundTask
{
ThreadPoolTimer _periodicTimer = null;
public void Run(IBackgroundTaskInstance taskInstance)
{
_periodicTimer
= ThreadPoolTimer.CreatePeriodicTimer(new TimerElapsedHandler(PeriodicTimerCallback), TimeSpan.FromSeconds(30));
}
private void PeriodicTimerCallback(ThreadPoolTimer timer)
{
CheckEventAndShowToast();
}
....
}
Run Code Online (Sandbox Code Playgroud)
2. 注册任务:在MainPage.xaml.cs中添加方法OnNavigatedTo注册此后台任务.码:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
navigationHelper.OnNavigatedTo(e);
var taskName = "EventCheckerTask";
if (BackgroundTaskRegistration.AllTasks.Count > 0)
{
foreach (var cur in BackgroundTaskRegistration.AllTasks)
{
if (cur.Value.Name != taskName)
{
BackgroundTaskBuilder builder = new BackgroundTaskBuilder();
builder.Name …Run Code Online (Sandbox Code Playgroud) .net c# background-process windows-store-apps visual-studio-2013
我有一个显示游戏服务器数据的网站.游戏具有不同的"域"(实际上只是单独的服务器),用户可以使用它们.
现在,我cron每隔6小时有不同时间间隔运行14 个工作岗位.运行的所有14个文件几乎相同,每个文件大约需要75分钟(一小时15分钟)才能完成运行.
我曾想过只使用1个文件运行cron并循环遍历每个服务器,但这只会导致一个文件运行18个小时左右.我当前的VPS设置为仅允许1vCPU,所以我正在尝试完成任务并保持在我分配的服务器负载内.
看到该网站需要每6小时更新一次数据,这是不可行的.
我开始研究消息队列并将一些信息传递给将执行相关工作的后台进程.我开始试图使用resque和php-resque,但我的后台工作人员一旦开始就死了.所以,我继续前进ZeroMQ,无论如何,这似乎更符合我的需要.
我通过Composer设置了ZMQ,安装过程中的一切都很顺利.在我的工作脚本(每6小时将由cron调用)中,我得到了:
$dataContext = new ZMQContext();
$dataDispatch = new ZMQSocket($dataContext, ZMQ::SOCKET_PUSH);
$dataDispatch->bind("tcp://*:50557");
$dataDispatch->send(0);
foreach($filesToUse as $filePath){
$dataDispatch->send($filePath);
sleep(1);
}
$filesToUse = array();
$blockDirs = array_filter(glob('mapBlocks/*'), 'is_dir');
foreach($blockDirs as $k => $blockDir){
$files = glob($rootPath.$blockDir.'/*.json');
$key = array_rand($files);
$filesToUse[] = $files[$key];
}
$mapContext = new ZMQContext();
$mapDispatch = new ZMQSocket($mapContext, ZMQ::SOCKET_PUSH);
$mapDispatch->bind("tcp://*:50558");
$mapDispatch->send(0);
foreach($filesToUse as $blockPath){
$mapDispatch->send($blockPath); …Run Code Online (Sandbox Code Playgroud) 前言:在运行6.0.1的手机上运行正常.但是在运行7.1.1的手机上,它不是,如下所示.
build.gradle(模块:app)
compileSdkVersion 25
buildToolsVersion "25.0.0"
applicationId "com.gesslar.threshvote"
minSdkVersion 19
targetSdkVersion 25
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml中
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<receiver
android:name=".NetworkChangeReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
NetworkUtil.java 我有一个BroadcastReceiver,我用它来简单地调用NetworkUtil.updateNetworkStatus(context);
public static void updateNetworkStatus(Context context) {
final ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
if (activeNetwork == null) {
Log.d(TAG, "NO CONNECTION INFORMATION");
return;
}
if (activeNetwork.isConnected()) {
Log.d(TAG, "WE ARE CONNECTED TO A NETWORK");
} else {
Log.d(TAG, "WE ARE NOT CONNECTED TO A NETWORK");
return;
}
Log.d(TAG, …Run Code Online (Sandbox Code Playgroud) 我们有一个ERP,每月两次,过去两周的所有订单都需要收费.为了让我们的客户选择所有这些订单,按下"生成账单"按钮,每个发票一次完成一系列连续的ajax http请求,同时弹出消息通知他们该过程.
首先,所有的发票都是在DB中按顺序生成的,正如前面提到的那样,一旦完成这个过程,那么轮到生成PDF文件了.这也是顺序ajax请求.
这是好的,只要用户保持窗口不变.它们离开该页面或关闭它,整个过程,如果有许多发票要生成,可能需要几分钟才能停止.
如果在中间停止进程,则可能会生成许多没有生成PDF文件的发票.这一点至关重要,因为当他们发送所有要打印的发票时,如果必须动态生成PDF内容并将其发送到打印机,则此操作需要做更多工作,而不是从现有文件中读取内容.
我可以更改流程,以便在生成一张发票后,下一步操作是生成其文件,依此类推.但我想知道是否有某种方法可以通过system(),exec()等方式将进程发送到后台,并在进程完成后在同一个Web应用程序中收到通知,无论用户是否决定离开结算页面做其他任务.
当视频处理过程中用户从任务管理器中关闭应用程序然后停止处理时,就会出现问题。
我正在使用FFMpeg在android中进行视频文件处理,它工作正常,但是当我在从任务管理器处理过程中关闭应用程序时,视频处理已停止工作,即使我在工作管理器中添加了所有工作。
@Override
public Result doWork() {
shellCommand = new ShellCommand();
ffmpegBinary = new String[] {
FileUtils.getFFmpeg(context).getAbsolutePath()
};
command = concatenate(ffmpegBinary, command);
CommandResult commandResult = getCommandResult(command);
if (command`enter code here`Result.success) {
onSuccess(videoPath);
} else {
onFailure(videoPath);
}
}
//getCommandResult
private CommandResult getCommandResult(String[] command) {
try {
process = shellCommand.run(command, null);
if (process == null) {
return CommandResult.getDummyFailureResponse();
}
checkAndUpdateProcess();
return CommandResult.getOutputFromProcess(process);
} catch(Exception e) {} finally {
Util.destroyProcess(process);
}`enter code here`
return CommandResult.getDummyFailureResponse();
}
Run Code Online (Sandbox Code Playgroud)
据我所知,当应用程序从后台关闭时,父进程会销毁它并同时销毁其所有子进程,FFMpeg正在使用android进程执行命令并在视频处理过程中检查视频文件状态。
期待着听到您的意见。谢谢
android ffmpeg background-process mp4parser android-workmanager