我有一个表单,我想通过 ajax-post 发送给我的控制器。同时 HTML 正在等待记录的生成和保存,我想显示进度(现在只是数字)。我真的不明白为什么下面的代码没有<div id="progress">用Session::get('progress').
控制器:
public function postGenerate() {
// getting values from form (like $record_num)
Session::flash('progress', 0);
$i = 1;
for ($i; $i < $record_num; $i++) {
$record = new Record();
// adding attributes...
$record->save;
Session::flash('progress', $i);
}
$response = Response::make();
$response->header('Content-Type', 'application/json');
return $response;
}
Run Code Online (Sandbox Code Playgroud)
Javascript:
@section('scripts')
<script type="text/javascript">
$(document).ready(function() {
$('#form-overview').on('submit', function() {
setInterval(function(){
$('#progress').html( "{{ Session::get('progress') }}" );
}, 1000);
$.post(
$(this).prop('action'),
{"_token": $(this).find('input[name=_token]').val()},
function() {
window.location.href = 'success';
}, …Run Code Online (Sandbox Code Playgroud) 我有一个带有长循环的C++程序.它有大约500000次迭代.我想每5%打印一次进度.
我到目前为止的内容如下.问题在于它会一遍又一遍地写同一行(0%,%5等).这是因为在将百分比截断为整数之后,将有1000次迭代将达到5的倍数.这使得程序明显变慢.
相反,如果我没有截断为整数,那么结果percent % 5.0不可能精确为0.
如何打印进度指示器,尽可能减少对运行时间的影响?
// Counters for progress indicator
int i = 0;
float totalWindows = (float)(win.nX * win.nY);
int percent;
while (win.next() == 0)
{
// Read the data
// Nicely formatted progress indicator
i++;
percent = (i / totalWindows) * 100;
if (percent % 5 == 0)
{
std::cout << "\r" << std::string(percent/5, '|') << percent << "%";
std::cout.flush();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:谢谢你的答案.我已经和christophes一起去了,其中只有最少的指令.它削减了25%的运行时间,非常重要!
我通过流反序列化一个巨大的 JSON (1.4 GB),因为我不想为了解析而提前将整个内容加载到内存中。这工作正常,但需要大约 80 秒,所以我想显示进度。
public JObject DeserializeViaStream(string filename)
{
object obj;
var serializer = new JsonSerializer();
using (var sr = new StreamReader(new FileStream(filename, FileMode.Open)))
{
using (var jsonTextReader = new JsonTextReader(sr))
{
obj = serializer.Deserialize(jsonTextReader);
}
}
return (JObject) obj;
}
Run Code Online (Sandbox Code Playgroud)
我还没有尝试过,但只有一个想法:我可以实现自己的流读取器,它跟踪正在读取的字节并将其与文件长度进行比较。
是否有内置选项或更简单的方法可以做到这一点?
我一直在使用Progress<T>,想知道是否可以将其替换Action<T>。
在下面的代码中,使用它们中的每个来报告进度(即ReportWithProgress()或)ReportWithAction()对我没有任何明显的影响。如何progressBar1增加字符串,如何将字符串写入输出窗口,它们看起来是相同的。
// WinForm application with progressBar1
private void HeavyIO()
{
Thread.Sleep(20); // assume heavy IO
}
private async Task ReportWithProgress()
{
IProgress<int> p = new Progress<int>(i => progressBar1.Value = i);
for (int i = 0; i <= 100; i++)
{
await Task.Run(() => HeavyIO());
Console.WriteLine("Progress : " + i);
p.Report(i);
}
}
private async Task ReportWithAction()
{
var a = new Action<int>(i => progressBar1.Value = i);
for (int i …Run Code Online (Sandbox Code Playgroud) 我在尝试让 2 色线性渐变中途停止时遇到问题,而没有以第二种颜色结束。
所以这个想法是使用线性梯度来显示消耗了多少带宽。我有一个起始颜色,颜色 100% 应该代表。但是当我用线性渐变只显示 50% 时,50% 标记是第二种颜色。它应该只在 2 种颜色的中间,如果使用率为 100%,则相同的颜色将为 50%。
我使用这个代码:
background: linear-gradient(-90deg, #438600, #8fd747);
Run Code Online (Sandbox Code Playgroud)
但是 25% 和 75%(例如)在各自的末端都有#8fd747。我需要它们以线性渐变中两种颜色之间的 25% 和 75%(分别)颜色结束。
我无法想象它有那么难,但我就是想不通。
谢谢
编辑:这是我正在寻找的图像:
正如您在上面看到的,即使未满,条形也代表完整的渐变。但在那些小于 100% 的情况下,我希望渐变显示其特定百分比的渐变水平,如 100% 所示。在实际达到 100% 之前,我不应该得到完全更深的颜色。
我正在使用 async/await 发出数千个 HTTP 请求,并希望有一个进度指示器。我以一种天真的方式添加了一个,但注意到当所有请求都完成时,计数器值永远不会达到总数。所以我创建了一个简单的测试,果然,它没有按预期工作:
fun main(args: Array<String>) {
var i = 0
val range = (1..100000)
range.map {
launch {
++i
}
}
println("$i ${range.count()}")
}
Run Code Online (Sandbox Code Playgroud)
输出是这样的,第一个数字总是改变:
98800 100000
Run Code Online (Sandbox Code Playgroud)
我可能在 JVM/Kotlin 中遗漏了一些关于并发/同步的重要细节,但不知道从哪里开始。有小费吗?
更新:我最终按照 Marko 的建议使用了频道:
/**
* Asynchronously fetches stats for all symbols and sends a total number of requests
* to the `counter` channel each time a request completes. For example:
*
* val counterActor = actor<Int>(UI) {
* var counter = 0
* for (total in channel) …Run Code Online (Sandbox Code Playgroud) 我对许多“标准”安装程序使用 Inno Setup,但对于此任务,我需要提取一堆临时文件,运行其中一个,然后删除它们并退出安装程序(不实际安装任何内容)。
基本上,我希望制作一个自解压器,而不是“安装程序”,并且追求通过 inno setup 获得最佳的用户体验。
我有以下代码,几乎可以正常工作:
[Files]
Source: "dist\*"; Flags: recursesubdirs ignoreversion dontcopy;
Run Code Online (Sandbox Code Playgroud)
[Files]
Source: "dist\*"; Flags: recursesubdirs ignoreversion dontcopy;
Run Code Online (Sandbox Code Playgroud)
问题是,我在这里能做的最好的事情就是显示一个消息框“请稍等一两分钟...”,用户单击[确定],然后等待,因为屏幕上根本没有任何内容,似乎什么也没有发生,然后MyScript.exe开始。
我想要的是一个向导页面,上面写着“请稍候,临时文件被提取...”,并带有npbstMarquee样式进度条,然后一旦文件被提取并且我的脚本启动,它就会消失。
我认为没有办法告诉 Inno Setup 在ExtractTemporaryFiles()运行时显示进度条(这将是理想的),并且将其放入自定义向导页面让我感到困惑。
在浏览Android Material Components时,我遇到了这个列表加载动画。
我知道一些具有水平加载动画的库(例如ShimmerLayout、Facebook 的Shimmer )。但它并不那么流畅,因为它只是在获取数据后立即渲染 UI。如果你看视频中的动画,它实际上会显示垂直闪烁并一一呈现响应。我想知道怎样才能达到这样的效果。
我一直在使用以下代码在我的服务器上上传文件,因为它正在执行这项工作,但我想在操作期间监控上传进度百分比并相应地更新 UI 以向用户反映进度
uploadFile({File imageFile, String refCode}) async {
// open a bytestream
var stream =
new http.ByteStream(DelegatingStream.typed(imageFile.openRead()));
// get file length
var length = await imageFile.length();
// string to uri
var uri = Uri.parse(
'http://-------------/api/FilesUploadB/?refCode=$refCode');
// create multipart request
var request = new http.MultipartRequest("POST", uri);
// multipart that takes file
var multipartFile = new http.MultipartFile('file', stream, length,
filename: basename(imageFile.path));
// add file to multipart
request.files.add(multipartFile);
// send
var response = await request.send();
// listen for response
response.stream.transform(utf8.decoder).listen((value) {
print(value); …Run Code Online (Sandbox Code Playgroud)