您可能知道很多程序,例如一些密码破解程序,我们可以在它们运行时停止它们,当我们再次运行程序时(无论是否输入相同的输入),它们都能够从他们继续的地方继续离开了.我想知道这些程序使用的是哪种技术?
[编辑]我正在编写一个主要基于递归函数的程序.据我所知,我认为在我的程序中保存这些状态是非常困难的.是否有任何技术,以某种方式,保存我的程序中涉及的堆栈内容,函数调用和数据,然后当它重新启动时,它可以运行,就好像它没有被停止?这只是我心中的一些概念,所以请原谅我,如果它没有意义......
有没有办法暂停应用程序执行,将其进程映像存储到文件中,以后再恢复(保持应用程序暂停时)?我想要做的就是像WinXP上的应用程序的"休眠".
有没有能够做到这一点的应用程序?
到目前为止,我所使用的是一个使用vmware的虚拟化系统,我可以暂停和恢复应用程序,但是为了完成任务,我必须暂停整个虚拟化系统.
先感谢您.
有没有人知道关于android/linux暂停/恢复的整个过程和代码流程的任何好的阅读(按下手机上的结束键后)?我想了解并阅读相关的代码和文件.
或者,也许有人可以指点我看代码......
我在我的应用程序中使用多个线程.基本上我有一个组合框,当选择收件箱时,p1恢复,p2暂停,选择发送后,p2开始,p1停止.下面是代码(我确定它不完美)
public void modifyText(ModifyEvent e) {
if (combo.getText().equals("Inbox"))
{
synchronized(p2)
{
p2.cont = false;
}
table.removeAll();
synchronized(p1)
{
p1.cont = true;
p1.notify();
}
}
else if (combo.getText().equals("Sent"))
{
synchronized(p2)
{
p1.cont = false;
}
table.removeAll();
synchronized(p1)
{
p2.cont = true;
p2.notify();
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
对于P1和P2,我在他们的while循环中有这个:
synchronized (this) {
while (cont == false)
try {
wait();
} catch (Exception e) {
}
}
Run Code Online (Sandbox Code Playgroud)
...因为它现在正在工作(我是线程的初学者).在组合框中按下Sent后,我收到IllegalStateMonitorException.谁能帮我解决问题PLZ?
谢谢和问候,Krt_Malta
kotlin 中协程的想法是抽象挂起和回调的概念并编写简单的顺序代码。与线程类似,您永远不需要担心协程是否被挂起。
suspendCoroutineOrReturn它们的目的是什么?COROUTINE_SUSPENDED在什么情况下您会使用它们?
我正在使用Retrofit以发出一些网络请求。我还将协同程序与“挂起”功能结合使用。
我的问题是:有没有办法改善以下代码。这个想法是并行启动多个请求,并等待它们全部完成,然后再继续执行该功能。
lifecycleScope.launch {
try {
itemIds.forEach { itemId ->
withContext(Dispatchers.IO) { itemById[itemId] = MyService.getItem(itemId) }
}
} catch (exception: Exception) {
exception.printStackTrace()
}
Log.i(TAG, "All requests have been executed")
}
Run Code Online (Sandbox Code Playgroud)
(请注意,“ MyService.getItem()”是一个“暂停”函数。)
我猜在这种情况下,有什么比foreach更好的了。
有人有主意吗?
我试图在另一个挂起函数的参数中调用一个挂起函数。编译器实际上不允许这样做。它告诉我必须从挂起函数或协程调用挂起函数。
suspend fun compareElements(
isReady: Boolean = isReady() // IDE complains.
) {
...
}
//This is for this questions purpose. Reality is a bit more complex.
suspend fun isReady() = true
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?我需要isReady()在参数中。
所以通常当你不得不进行不同的 API 调用并等待时,你会做这样的事情:
viewModelScope.launch {
withContext(dispatcherProvider.heavyTasks) {
val apiResponse1 = api.get1() //suspend function
val apiResponse2 = api.get2() //suspend function
if (apiResponse1.isSuccessful() && apiResponse2.isSuccessful() { .. }
}
}
Run Code Online (Sandbox Code Playgroud)
但是如果我必须使用不同的参数同时执行多个相同的 API 调用,会发生什么:
viewModelScope.launch {
withContext(dispatcherProvider.heavyTasks) {
val multipleIds = listOf(1, 2, 3, 4, 5, ..)
val content = arrayListOf<CustomObj>()
multipleIds.forEach { id ->
val apiResponse1 = api.get1(id) //suspend function
if (apiResponse1.isSuccessful()) {
content.find { it.id == id }.enable = true
}
}
liveData.postValue(content)
}
}
Run Code Online (Sandbox Code Playgroud)
第二种方法的问题是它将遍历multipleIds列表的所有 id并进行异步调用,但content可能会在此之前发布。如何等待每个循环的所有响应完成,然后 …
我有点困惑。我知道如果一个函数想要与协程一起工作,它应该被声明为 suspend 例如:
private suspend fun doSomething() {
withContext(Dispatchers.IO) {
//do something
} }
Run Code Online (Sandbox Code Playgroud)
而且我也知道有这样一种方法可以在函数不被挂起的情况下使用协程。喜欢:
private fun doSomething1() {
CoroutineScope(Dispatchers.IO).launch {
//do something
} }
Run Code Online (Sandbox Code Playgroud)
这两个函数有什么区别?何时使用第一个示例,何时使用第二个示例?
我想写一个简短的python脚本让我的电脑进入睡眠状态.我已经搜索了API,但暂停的唯一结果与延迟执行有关.诀窍是什么功能?