要检测并防止关机,我使用非常简单的程序.它只有一个表单和一个私有程序,如下所示:
TForm3 = class(TForm)
private
procedure WMQueryEndSession(var Msg : TWMQueryEndSession) ;
message WM_QueryEndSession;
end;
Run Code Online (Sandbox Code Playgroud)
和实施
procedure TForm3.WMQueryEndSession(var Msg: TWMQueryEndSession);
begin
Msg.Result := 0; //so I don't want to shutdown while my program is running
end;
Run Code Online (Sandbox Code Playgroud)
我编译了Delphi 5和Delphi 2010.它们都检测到了shutdown.但是当我在Delphi 2010中编译时; 在阻止关机后我的程序关闭.(PC没有关机)
如何从两者中获得相同的结果?
我使用Indy 9和Delphi 5.在我的应用程序中,我想通过UDP与网络设备通信.所以我使用UDPServer comp.在一个派生自TThread的类中.当我写类似于以下代码时,CPU使用率是100%.
在线程中:
while not terminated do begin
if GetMessage(Msg, 0, 0, 0) then begin
if Msg.message = WM_UDPMSG then
Break
else
DispatchMessage(Msg);
end;
end;
Run Code Online (Sandbox Code Playgroud)
和OnUDPRead事件:
try
// Processing the data here
except
PostThreadMessage(ThreadId, WM_UDPMSG, 0, 0);
end;
Run Code Online (Sandbox Code Playgroud)
当我在while-do循环或OnUDPRead事件中使用Sleep函数时,没有任何变化.CPU使用率仍为100%.
我的线程优先级是正常.
我怎样才能解决我的问题?
我不知道OWNER对象类名.所以我必须检查我的代码中的所有地方:
if TObject(OWNER) is TFirstClass then begin
TFirstClass(OWNER).FirstFunction;
TFirstClass(OWNER).SecondFunction;
...
end else
if TObject(OWNER) is TSecondClass then begin
TSecondClass(OWNER).FirstFunction;
TSecondClass(OWNER).SecondFunction;
...
end;
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?因为如果在代码的许多地方有条件,我必须这样做.TFirstClass和TSecondClass(我必须运行)的所有功能都是相同的.
注意:我使用的是Delphi 5.
在德尔福 ; Application.MessageBox,Windows.MessageBox或Dialogs.MessageDlg之间有什么区别?或者使用计算机内存更有效率?
我想打一个TCPserver下和发送/接收邮件的客户需要的TCPserver下的,不OnExecute事件.
发送/接收消息不是问题; 我喜欢这样:
procedure TFormMain.SendMessage(IP, Msg: string);
var
I: Integer;
begin
with TCPServer.Contexts.LockList do
try
for I := 0 to Count-1 do
if TIdContext(Items[I]).Connection.Socket.Binding.PeerIP = IP then
begin
TIdContext(Items[I]).Connection.IOHandler.WriteBuffer(Msg[1], Length(Msg));
// and/or Read
Break;
end;
finally
TCPServer.Contexts.UnlockList;
end;
end;
Run Code Online (Sandbox Code Playgroud)
注1:如果我不使用OnExecute,程序会在客户端连接时引发异常.
注意2:如果我在不做任何事情的情况下使用OnExecute,则CPU使用率将达到%100
注3:我没有机会更改TCP客户端.
所以我该怎么做?
我在Delphi 5和2010中使用了相同的函数(OneWayEncrypt(edit1.Text)).
为什么结果不同?(或者我如何从Delphi 2010中获得相同的结果?)
uses Sysutils, Windows, Dialogs, classes;
function OneWayEncrypt(AStr: string): string;
PROCEDURE CalcCRC32 (p: pointer; ByteCount: DWORD; VAR CRCvalue: DWORD);
implementation
const
table: ARRAY[0..255] OF DWORD =
(
//table consts are here
);
PROCEDURE CalcCRC32(p: pointer; ByteCount: DWORD; VAR CRCvalue: DWORD);
VAR
i: DWORD;
q: ^Byte;
BEGIN
q := p;
FOR i := 0 TO ByteCount - 1 DO
BEGIN
CRCvalue := (CRCvalue SHR 8) XOR table[q^ XOR (CRCvalue AND $000000FF)];
INC(q);
END
END;
function OneWayEncrypt(AStr: …Run Code Online (Sandbox Code Playgroud) 如何将此结构转换为Delphi?
typedef struct a_config {
union {
struct {
char mode[10];
char name[10];
} dn;
struct {
int r;
} sm;
struct {
int r;
} xo;
} config;
} a_config_t;
Run Code Online (Sandbox Code Playgroud)