mirror of
https://github.com/weyne85/rustdesk.git
synced 2025-10-29 17:00:05 +00:00
move rust-sciter in
This commit is contained in:
82
libs/rust-sciter/examples/threads.htm
Normal file
82
libs/rust-sciter/examples/threads.htm
Normal file
@@ -0,0 +1,82 @@
|
||||
<html window-icon="https://cdn2.iconfinder.com/data/icons/arts-crafts-sewing/24/sewing_thread_handcraft_craft_1-32.png">
|
||||
<head>
|
||||
<title>Threads demo</title>
|
||||
<style>
|
||||
div#content { flow:horizontal; size:*; }
|
||||
div#explanation { size:*; padding:20px; overflow:auto; }
|
||||
div#explanation > pre { padding:10px; border:1px dotted #999; background:#ffffef; }
|
||||
|
||||
div#tasks { width:300px; height:*; }
|
||||
div#tasks > select { size:*; display:block; }
|
||||
div#tasks > select progress { margin-left: 5px; }
|
||||
</style>
|
||||
<script type="text/tiscript">
|
||||
|
||||
var taskNo = 0;
|
||||
|
||||
$(#start-task).onClick = function()
|
||||
{
|
||||
++taskNo;
|
||||
|
||||
var taskElem = $(div#tasks > select).$append(<option>Task { taskNo }<progress max=100 /> <span.result /></option>);
|
||||
|
||||
function onProgress(p100) { taskElem.$(progress).value = p100; }
|
||||
function onDone(taskId) {
|
||||
taskElem.$(span.result).text = "Done!";
|
||||
taskElem.$(progress).remove();
|
||||
}
|
||||
|
||||
view.exec_task(taskNo, onProgress, onDone);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<h2>Sciter UI, threads demo</h2>
|
||||
<div id="content">
|
||||
<div id="tasks">
|
||||
<button id="start-task">Start Task</button>
|
||||
<select type="select"></select>
|
||||
</div>
|
||||
<div id="explanation">
|
||||
<p>The Start Task onClick handler is defined as</p>
|
||||
<pre>
|
||||
$(#start-task).onClick = function()
|
||||
{
|
||||
var taskElem = $(div#tasks > select)
|
||||
.$append(<option>Task { ++taskNo }
|
||||
<progress max=100 />
|
||||
<span.result /></option>);
|
||||
function onProgress(p100) {
|
||||
taskElem.$(progress).value = p100;
|
||||
}
|
||||
function onDone(taskId) {
|
||||
taskElem.$(span.result).text = "Done!";
|
||||
taskElem.$(progress).remove();
|
||||
}
|
||||
view.exec_task(taskId, onProgress, onDone);
|
||||
}
|
||||
</pre>
|
||||
|
||||
<p>It defines couple of callback functions and calls <code>view.exec_task()</code> with them.</p>
|
||||
<p>The <code>view.exec_task()</code> native method is implemented in <code>EventHandler::exec_task()</code>.</p>
|
||||
<p>The <code>EventHandler::exec_task()</code> starts worker thread passing <em>taskNo</em>, <em>onProgress</em> and
|
||||
<em>onDone</em> parameters to it.</p>
|
||||
<p>Worker thread body is defined in Rust code as:</p>
|
||||
<pre>
|
||||
// worker thread body, simulate time consuming task
|
||||
fn thread_body(task_no: i32, progress: Value, done: Value)
|
||||
{
|
||||
for i in 1..100 {
|
||||
std::thread::sleep(std::time::Duration::from_millis(100));
|
||||
progress.call(None, &make_args!(i), None).unwrap(); // report task progress
|
||||
}
|
||||
// report task completion,
|
||||
// we can pass some result data here, for now just taskId
|
||||
done.call(None, &make_args!(task_no), None).unwrap();
|
||||
}
|
||||
</pre>
|
||||
<p>As you see it calls passed callback functions.</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user