相关疑难解决方法(0)

TForm.Handle线程安全吗?

我经常将主窗体句柄传递给其他线程,以便它们可以将消息发送回主线程.我在2013年9月28日看到,Remy Lebeau说:

... TWinControl.Handle属性也不是线程安全的.您应该使用TApplication.Handle属性,或使用AllocateHWnd()创建自己的窗口.

这个回答有关传递字符串的问题.

手柄属性如何不安全?它是否在程序的生命周期中发生变化?

delphi multithreading postmessage

2
推荐指数
1
解决办法
216
查看次数

Postmessage LParam截断

我的应用程序有一个工作线程,我使用PostMessage将字符串发送到主线程.对于1条消息,字符串在到达主线程中的消息处理程序时被截断.

字符串在工作线程中由一串原始数据构成,如下所示.它在最后的'20'结束.

'01010000000030000102000008850008855343414E204544474520000000000000000000'

解码到我要发送的字符串中它看起来像这样,这是正确的:

'0100 0.50000 LSB0288.588.5SCAN EDGE'

创建"SCAN EDGE"部分并发布它的代码是:tmp和s_out是字符串

x := 35;
for i := 1 to 10 do
begin
  tmp := '$' + copy(s,x,2);
  TryStrToInt(tmp,dec);
  s_out := s_out + chr(dec);
  x := x + 2;
end;
PostMessage(MainHandle,UM_CLONE, UM_756, Integer(PChar(s_out)));
Run Code Online (Sandbox Code Playgroud)

主线程中的消息处理程序是:i是一个字符串

i := pChar(msg.LParam);
Run Code Online (Sandbox Code Playgroud)

当它到达主线程时,我在调试器中看起来像这样:

'0100 0.50000 LSB0288.588.5SCAN EDG'#0

我怎么能纠正这个?

delphi multithreading postmessage delphi-7

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

标签 统计

delphi ×2

multithreading ×2

postmessage ×2

delphi-7 ×1