小编Mar*_*lka的帖子

等待ShellExecute执行之前?

我有一个希望很快的问题:是否有可能延迟执行ShellExecute一点?

我有一个autoupdater应用程序.在下载所有必需的文件等之后,它会将当前文件重命名为*.OLD,将新文件重命名为之前的文件.很简单.但后来我需要删除那些.OLD文件.这个'清理'程序在MainForm.OnActivate上执行(检查它是否是第一个激活proc).但这显然发生得太快(我从DeleteFile得到False).这是程序:

procedure TUpdateForm.OKBtnClick(Sender: TObject);
const SHELL = 'ping 127.0.0.1 -n 2';
begin
  ShellExecute(0,'open',pchar(SHELL+#13+Application.ExeName),nil,nil,SW_SHOWNORMAL);
  Application.Terminate;
end;
Run Code Online (Sandbox Code Playgroud)

此过程应该重新启动应用程序.我确定删除问题是由第二个应用程序的快速启动引起的,因为如果我自己重新启动它,给它一点时间,文件会被正常删除.

tl; dr版本:我需要调用ShellExecute()等待(0.1秒左右)然后THEN执行命令.

注意

我尝试使用-ping命令尝试延迟它,但它没有用.

非常感谢你提前

编辑:改述

我需要这个发生|| 第一个应用关闭; 等待100毫秒; 第二个应用程序打开 ||.我需要先调用ShellExecute,然后等待调用应用程序完全关闭,然后执行shell(即打开第二个应用程序)

delphi shellexecute delay

8
推荐指数
1
解决办法
9632
查看次数

使用格式保存源代码(语法高亮)

我需要将我的代码提交给.pdf文件中的竞赛.如果在实际工作室中突出显示语法,那将会很好并且更容易阅读.我真的不想自己突出显示它,一行一行,所以有没有办法在.rtf中导出Delphi源代码?

谢谢

delphi rtf export

8
推荐指数
2
解决办法
2387
查看次数

Mockito 匹配原始类型

使用 Mockito 设置模拟时出现异常:

java.lang.NullPointerException: Attempt to invoke virtual method 'double java.lang.Double.doubleValue()' on a null object reference
Run Code Online (Sandbox Code Playgroud)

设置代码是这样的:

Mockito
    .when(aMock.method(any(), any()))
    .thenReturn(something);
Run Code Online (Sandbox Code Playgroud)

哪里method需要两个double参数。

java mockito

8
推荐指数
2
解决办法
4232
查看次数

Symfony Messenger 工作人员在主管下运行时不会停止

我正面临 Symfony Messenger 组件的奇怪行为。我根据文档进行了设置,并按照此处的messenger:stop-workers说明在每次部署时发出信号。但是,我们的系统中出现了一个错误,我可以追溯到该错误是因为 Messenger 工作人员正在使用旧版本的代码。

经过更多调查,这就是我们的设置中发生的情况:

  • 一个工人正在运行,由主管管理。
  • 只是为了调试这个特殊情况,我在终端中启动了一个新的工作程序,app/console messenger:consume --env=prod -vv async看看会发生什么
  • 我发出停止命令 app/console messenger:stop-workers --env=prod
  • 我现在希望这两个工人都会被停止(并且主管会重新启动它正在处理的那个)。然而,这不会发生。“调试”工作人员确实停止了,但在主管下运行的工作人员什么也不做。

主管管理的工人被限制为 1 小时的处理时间,之后他们将被停止并重新启动。我可以看到supervisord.log这很好用。每小时都有关于进程停止和启动的日志条目。但是没有任何关于他们停止messenger:stop-workers命令的事情。

我正在寻找关于为什么会发生这种情况的想法。我阅读了工作人员的实现,关闭信号是通过缓存发送的,但我没有发现我们的配置有任何问题。

symfony symfony-messenger

8
推荐指数
1
解决办法
1454
查看次数

使用不同的命令重新启动 Kubernetes 作业或 Pod

我正在寻找一种从命令行快速运行/重新启动作业/Pod 并覆盖要在创建的容器中执行的命令的方法。

对于上下文,我有一个 Kubernetes 作业,它作为部署过程的一部分执行。有时该作业会崩溃,我需要在作业创建的容器内运行某些命令来调试和修复问题(后续作业会成功)。

到目前为止我这样做的方法是:

  • 复制作业的 YAML,保存到文件中
  • 清理 YAML(删除 Kubernetes 管理的字段)
  • command:字段更改为tail -f /dev/null(以便容器保持活动状态)
  • kubectl apply -f job.yaml && kubectl get all && kubectl exec -ti pod/foobar bash
  • 在容器内运行命令
  • kubectl delete job/foobar当我完成时

这是非常乏味的。我正在寻找一种方法来做类似以下的事情

kubectl restart job/foobar --command "tail -f /dev/null"

# or even better
kubectl run job/foobar --exec --interactive bash
Run Code Online (Sandbox Code Playgroud)

我无法使用以下run命令创建 Pod:

kubectl restart job/foobar --command "tail -f /dev/null"

# or even better
kubectl run job/foobar --exec --interactive bash
Run Code Online (Sandbox Code Playgroud)

因为我尝试重新启动的作业具有 …

kubernetes kubectl kubernetes-jobs

8
推荐指数
1
解决办法
3万
查看次数

如何在记录中声明固定值?

我想知道如何声明一个具有一些固定值的记录.我需要使用这种模式发送数据:Byte($FF)-Byte(0..250)-Byte(0..250).我正在使用record它,我想让它的第一个值保持不变,这样就不会搞砸了.如:

TPacket = record
  InitByte: byte; // =255, constant
  FirstVal,
  SecondVal: byte;
end;
Run Code Online (Sandbox Code Playgroud)

delphi

7
推荐指数
1
解决办法
5477
查看次数

TextView的ellipsize无法处理maxLines = 1

我真的无法弄清楚为什么,但我只能让ellipsize工作maxLines=2更多.我正在显示几个描述的单词,然后是一个没有空格的长字符串.

这就是TextView的样子:

<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:textColor="#757575"
                android:text="@string/gcm_not_registered"
                android:maxLines="1"
                android:ellipsize="end"
                android:id="@+id/login_gcmRegistrationTextView"/>
Run Code Online (Sandbox Code Playgroud)

然后我以编程方式设置文本,但根据maxLines限制,我得到两个不同的结果:

MAXLINES = 1 的maxlines = 2

唯一改变的是maxLines,为什么第一张图片中的线条也没有填满?

android textview

7
推荐指数
2
解决办法
7524
查看次数

为什么要在课堂上使用财产?

我只是想知道为什么我应该在类中使用属​​性而不是"普通"变量(类属性?).我的意思是:

TSampleClass = class
  public
    SomeInfo: integer;
end;

TPropertyClass = class
  private
    fSomeInfo: integer;
  public
    property SomeInfo: integer read fSomeInfo write fSomeInfo;
end;
Run Code Online (Sandbox Code Playgroud)

有什么大不同?我知道我可以分别定义获取或保存属性的getter和setter方法,但即使没有变量是"属性",这也是可能的.

我试着搜索为什么要使用它,但没有任何有用的东西出现,所以我在这里问.

谢谢

delphi oop properties

6
推荐指数
1
解决办法
7539
查看次数

重写和非重写的构造函数

我只是想问一个简单的问题 - 我有一个派生自TLabel的类如下:

TMyLabel = class (TLabel)
  ...
  constructor Create(AOwner: TComponent); override;
end;

constructor TMyLabel.Create(AOwner: TComponent); 
begin
  inherited Create(AOwner);
  { some code }
end;
Run Code Online (Sandbox Code Playgroud)

现在,Delphi允许我使用和不使用覆盖来编译两个版本.你能解释一下这些差异是什么吗?除了在被覆盖Create()时无法请求我自己的参数.谢谢

编辑:我的意思是 - a virtual和非虚拟基础后代构造函数之间的区别是什么?我总是可以调用继承的构造函数inherited Create(),那有什么意义呢?

delphi oop

6
推荐指数
1
解决办法
393
查看次数

在没有焦点的情况下滚动RichEdit

添加一行后,我需要将RichEdit滚动到最后.我有一个单独的RichEdit形式,我不想得到任何关注.我经常尝试建议解决方案:

RichEdit.Lines.Add(someText);
RichEdit.SelStart:=RichEdit.GetTextLen;
SendMessage(RichEdit.handle, EM_SCROLLCARET, 0, 0);
Run Code Online (Sandbox Code Playgroud)

但这对我不起作用.但是,当我在调用SendMessage使用之前关注RichEdit时,RichEdit.SetFocus;它可以正常工作.然而,这破坏了我对应用程序的其他需求.

我正在使用XE2.谢谢

delphi richedit

6
推荐指数
2
解决办法
6191
查看次数