我需要在Delphi中创建一个具有以下特征的线程:
我无法向线程发送消息,因为它没有窗口句柄.
我应该使用WaitForObject的某些变体吗?如果是这样,等待的是什么?如果没有,那么我如何保持线程等待,然后在新数据进入队列时唤醒它?
我读过Multithreading - Delphi Way,它似乎没有回答我的问题.也许 OmniThreadLibrary可以做我需要的事情; 我无法分辨,因为文档很少.我不太了解一般的线程,以确定库是否会在这里提供帮助以及如何使用它(甚至为什么要使用它而不是仅使用TThread后代).
我有一个SQL 2005 x64服务器,当我尝试对它发出一些查询时(例如,当我尝试创建索引时),我的SPID立即进入"休眠"状态,并且似乎无限期地等待.它没有被阻塞(SP_WHO2中的"BLKBY"列为空),CPU和DiskIO值非常小(每个300以下),并且没有增长.
我的查询可能还在等什么?如果我在表格中执行SELECT*,我会在一分钟左右的时间内返回所有百万行,因此它不会阻止表访问,甚至(似乎)表争用.
关于我可以查看的其他事情的任何想法?我只需要放弃并重新启动我的SQL实例吗?:)
详细信息:我正在从SSMS中的另一个选项卡运行CREATE INDEX,并且它永远不会返回 - 它只显示"正在执行"并且永远不会返回,所以我不认为该过程已被放弃.
我已经写了一个实用工具,通过蓝牙与TomTom GPS手表交谈,并且我试图让它作为一个即时可待的背景守护程序运行良好.
程序定期与GPS设备通信,然后暂时与sleeps 通信,直到再次需要它为止.
我注意到sleep()与系统挂起奇怪地交互:当我进入系统挂起(运行Linux 3.16.0内核的笔记本电脑)然后唤醒计算机时,sleep似乎没有注意到暂停时间.例如,请执行以下操作sleep.c:
#include <time.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char**argv)
{
time_t t=time(NULL);
printf("sleep at: %s", ctime(&t));
sleep(atoi(argv[1]));
t=time(NULL);
printf("wake at: %s", ctime(&t));
}
dlenski@dlenski-ultra:~$
Run Code Online (Sandbox Code Playgroud)
中途编译,运行和睡眠;
$ gcc sleep.c -o sleep
$ ./sleep 30
sleep at: Fri Aug 21 21:05:36 2015
<suspend computer for 17 seconds>
wake at: Fri Aug 21 21:06:23 2015
Run Code Online (Sandbox Code Playgroud)
有没有一种正确的方法来暂停程序执行的方式是时钟 - 时间 -意识而不是系统正常运行时间 -意识到? …
所以我知道这已被打死,但我仍然无法找到解决方案.
我将我的UIApplicationExitsOnSuspend设置为<true/>在Info.plist中,仍然在模拟器和iPhone 4设备上,应用程序进入待机而不是终止?
有什么想法让它终止的任何想法?也许我需要从应用程序委托中删除方法?有任何想法吗?
我们使用PyCharm 5.0.1进行多线程调试.
当它在断点处停止时,只有特定线程停止而所有其他线程继续.这使得很难"冻结时刻"并检查params值以及其他线程的当前状态.
当其中一个线程在断点处停止时,是否可以暂停所有线程?
这可能是最新的Pycharm 2016还是[最新] Pycharm版本?
我想知道我的应用何时暂停?在一定时间内未被激活或被用户终止的状态.我需要这个,因为我需要关闭一个Web套接字的连接.我想在应用程序处于后台状态时保持连接处于活动状态.
我该怎么做呢?
谢谢
编辑:这不是一个重复的问题,其他问题是关于应用程序不再活动时,我想知道该应用程序已被终止.
我正在运行一个 Debian-Jessy 服务器,它在几个小时的网络不活动后进入 S3 睡眠模式(我制作了一个小 bash 脚本,每两个小时用 crontab 检查一次)。暂停几秒钟后,它再次醒来。几个小时后,当我的脚本由于网络不活动而再次触发 pm-suspend 时,它会暂停并且不会再次唤醒。唤醒它的唯一方法应该是 WOL(网络唤醒)。
我能做什么?
编辑:这可能与 WOL 包有关,因为我发现有人报告了同样的问题: https : //bbs.archlinux.org/viewtopic.php?id=173596
http://ubuntuforums.org/showthread.php?t=2233674
https://bugzilla.kernel.org/show_bug.cgi?id=46421
这是我的脚本的示例日志:
---------------------------------------
Sun Nov 23 02:00:01 CET 2014
No activity; Suspending now!
#######################################
Sun Nov 23 02:00:02 CET 2014
pm-suspend
#######################################
Sun Nov 23 02:00:15 CET 2014
pm-resume
---------------------------------------
Sun Nov 23 06:00:01 CET 2014
No activity; Suspending now!
#######################################
Sun Nov 23 06:00:01 CET 2014
pm-suspend
#######################################
Sun Nov 23 16:32:14 CET 2014
pm-resume
Run Code Online (Sandbox Code Playgroud)
如您所见,它立即再次醒来。但是第二次,它成功挂起。
我禁用了 proc/acpi/wakeup 中的每个设备: …
从醒来
$ sudo pm-suspend
Run Code Online (Sandbox Code Playgroud)
导致异常行为取决于笔记本电脑是否连接到外部电源。
以下场景已经过测试可重现:
编辑 1:“完全重新启动”不会在完全关闭之后进行,正如在启动期间运行的 fsck 所证明的那样。我不相信这是预期的行为。
你能,善良的互联网,请帮助诊断这个问题吗?
基本调试信息如下。请让我知道我可以提供哪些进一步的调试信息。
System: Ubuntu 16.04 LTS
Machine: Asus K501UX
Video Driver: xserver-xorg-video-nouveau
Video Card: NVIDIA GeForce GTX 950M
Run Code Online (Sandbox Code Playgroud)
(使用专有的 nvidia 驱动程序会导致加载驱动程序后出现空白屏幕。)
$ uname -a
Linux robyn-xenail 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
再补充两点信息:
我不怀疑这是由 pm-suspend 启动的挂起过程的问题,而是与某些电源设置(acpi 等)有关。我已附上上述案例 1 …
我正在查看https://github.com/android/architecture-samples/tree/dev-dagger/app/src/main/java/com/example/android/architecture/blueprints/todoapp/data/source上的示例/local的dev-dagger分支和TasksLocalDataSource.kt文件中,它们具有以下方法:
override suspend fun getTasks(): Result<List<Task>> = withContext(ioDispatcher) {
return@withContext try {
Success(tasksDao.getTasks())
} catch (e: Exception) {
Error(e)
}
}
Run Code Online (Sandbox Code Playgroud)
通过使用withContextIO 作为调度程序,他们希望协程在 IO 线程上运行。但是tasksDao.getTasks()方法里面的 Room 请求是一个挂起函数。在https://codelabs.developers.google.com/codelabs/kotlin-coroutines/#8的代码实验室中,他们说当它是一个挂起函数时负责在后台线程上Room运行请求(此处getTasks():)这里就是这种情况。那么,使用 a 是不是太多了withContext(ioDispatcher)?我不能像下面这样重写上面的方法吗?:
override suspend fun getTasks(): Result<List<Task>> {
return Success(tasksDao.getTasks())
}
Run Code Online (Sandbox Code Playgroud) 在我用 Kotlin 开发的 Android 应用程序中,我无法使调试器在具有挂起功能的动态功能中在运行时设置的断点处停止。如果我在启动应用程序之前设置断点,它会起作用,但是当我尝试在运行时设置相同的断点时,它不会起作用,调试器只是继续跳过断点。我还检查了断点选项中的“全部暂停”,但无济于事,调试器仍然跳过断点。这是一个非常烦人的情况,因为每次我需要在挂起函数中的特定行暂停执行时,我必须首先停止应用程序,然后设置断点,然后重新启动应用程序。只有在这种情况下它才有效。相反,如果我在非挂起函数中设置断点,它也会在运行时起作用。任何想法?
suspend ×10
android ×2
debugging ×2
kotlin ×2
linux ×2
acpi ×1
android-room ×1
asus ×1
background ×1
breakpoints ×1
c ×1
clock ×1
debian ×1
delphi ×1
ios ×1
ios4 ×1
iphone ×1
objective-c ×1
pycharm ×1
python ×1
queue ×1
resume ×1
sleep ×1
sql-server ×1
standby ×1
terminate ×1
ubuntu ×1
ubuntu-16.04 ×1