5

たとえば、実行可能ファイルまたは dllのCreateTimerQueueTimerからのコールバックによって提供されるスレッドから? メインスレッドと同じスレッド ID を持つことは重要です。

procedure TMyMainClass.ExecuteMe(someparam: paramtype);
begin
  {something}
end;

procedure TimerCallback(pvContext: pointer; fTimerOrWaitFired: boolean); stdcall;
begin
  {do what ?}
end;

Final update:
このすべてのもの ( TThread.Synchronize、など) はTThread.QueuePostThreadMessageメッセージを通じて機能します。dllそのため、コールバックを待っている間、処理メッセージのホスト アプリケーションを確認してください。

4

1 に答える 1

7

TThreadインスタンスにアクセスせずにメイン スレッドでコードを実行するには、クラス メソッドTThread.SynchronizeまたはTThread.Queue.

これらのメソッドを持たない古い Delphi コンパイラを使用している場合は、SendMessageまたはPostMessageユーザー定義メッセージを使用するのが最も簡単な解決策です。

于 2013-04-06T21:20:24.350 に答える