program Test_exception1;
{$IFDEF FPC}
{$MODE Delphi}//MacPas}
{$assertions on}
{$ENDIF}
{$APPTYPE CONSOLE}
{$R *.res}
{$DEFINE __PTW32_MUTEX_TYPES}
uses
{$IFnDEF FPC}
System.SysUtils,
System.Win.Crtl,
Winapi.Windows,
{$ELSE}
Sysutils,
{$ENDIF}
libc.Types in 'libc.Types.pas',
pthreads.win in 'pthreads.win.pas',
pthreads.sem in 'pthreads.sem.pas',
pthreads.sched in 'pthreads.sched.pas',
pthreads.barrier in 'pthreads.barrier.pas',
pthreads.mutex in 'pthreads.mutex.pas',
pthreads.mutexattr in 'pthreads.mutexattr.pas',
pthreads.spin in 'pthreads.spin.pas',
pthreads.attr in 'pthreads.attr.pas',
pthreads.cond in 'pthreads.cond.pas',
pthreads.condattr in 'pthreads.condattr.pas',
pthreads.rwlock in 'pthreads.rwlock.pas',
pthreads.ptw32 in 'pthreads.ptw32.pas',
pthreads.oldmutex in 'pthreads.oldmutex.pas',
pthreads.core in 'pthreads.core.pas',
pthreads.CPU in 'pthreads.CPU.pas',
QueueUser_APCEx in 'QueueUser_APCEx.pas';
const
NUMTHREADS = 4;
procedure DoMessage(&Message, Filename: String; LineNumber: Integer; ErrorAddr: Pointer);
var
S: String;
begin
S := Format('%s (%s, line %d, address $%p)',
[&Message, Filename, LineNumber, ErrorAddr]);// Pred(Integer(ErrorAddr))]);
//OutputDebugString(PChar(S));
Writeln(S);
end;
procedure DoSucceedMessage(&Message, Filename: String; LineNumber: Integer; ErrorAddr: Pointer);
var
S: String;
begin
Delphi XE2+ 测试Pthread异常
最新推荐文章于 2026-02-06 23:22:45 发布
本文探讨了在多线程环境下如何实现线程的取消及异常处理机制,通过创建两个类型的线程——可被取消线程与异常抛出线程,并在运行过程中进行取消操作与异常触发。


587

被折叠的 条评论
为什么被折叠?



