- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
更新 1:我包含了所有线程的堆栈跟踪,而不仅仅是主线程的 - 我认为这已经足够了。
更新 2:我重新打开了这个问题,因为即使在应用了我自己的问题中所示的更改之后,我今天仍然收到完全相同的错误报告......
更新3:看来错误是在线程终止时发生的,并且发生错误时发送的线程消息是COmniTaskMsg_Termulated
。现在很奇怪 - 我已经用线程安全队列替换了程序中几乎所有对 Task.Comm.Send()
的调用,所以我很确定线程消息的数量经过Task.Comm
非常小,远小于可能填满 Windows 消息队列的大小...
我将 OmniThreadLibrary-3.03a(刚刚升级到最新的 svn,我会看到...)与 Delphi XE4 一起使用,并收到最终用户报告的错误、错误消息和线程的堆栈跟踪这个问题包含在最后。
实际上,我通过将对 Task.Comm.Send()
的调用替换为线程安全队列(后台线程使用该队列将日志发送到)来减少出现此错误的可能性主线程。现在我不知道该看哪里,最可能的地方是这里(但在此代码块内没有 Task.Comm.Send()
调用...):
//at this point, we are already in a thread other than the main thread.
//I've two instances of the very same thread running when the program runs.
myTasks := Parallel.ParallelTask.NumTasks(aTaskCount);// aTaskCount = 5
myTasks.Execute(
//the following anonymous method will be executed in sub-threads and will have
//multiple instances determined by the aTaskCount param.
procedure (const aSubTask: IOmniTask)
begin
//note: this code block runs in multiple sub-threads in parallel.
//aUidList can have tens of thousands (or even more) of item.
while aUidList.Take(uid) and (not Self.task.CancellationToken.IsSignalled) do
begin
ThreadedDoSomething();
end;
end
);//END sub-thread
堆栈跟踪:
process id : $2f9c
allocated memory : 181.30 MB
largest free block : 1019.73 MB
executable : MyProgram.exe
exec. date/time : 2014-08-02 21:12
version : 1.0.7.256
compiled with : Delphi XE4
madExcept version : 4.0.9
callstack crc : $8b5fc164, $b1225a03, $7caf0d48
exception number : 1
exception class : EOSError
exception message : System Error. Code: 1816. Not enough quota is available to process this command.
thread $1160 (TOmniThread): <priority:-15>
0045c3de MyProgram.exe System.SysUtils RaiseLastOSError
0045c35b MyProgram.exe System.SysUtils RaiseLastOSError
0045c40f MyProgram.exe System.SysUtils Win32Check
0075b387 MyProgram.exe OtlContainerObserver 252 TOmniContainerWindowsMessageObserverImpl.Send
0076debb MyProgram.exe OtlTaskControl 1378 TOmniTask.InternalExecute
0076db6a MyProgram.exe OtlTaskControl 1274 TOmniTask.Execute
0077423c MyProgram.exe OtlTaskControl 3091 TOmniThread.Execute
004ab243 MyProgram.exe madExcept HookedTThreadExecute
0053c596 MyProgram.exe System.Classes ThreadProc
0040a5b4 MyProgram.exe System 150 ThreadWrapper
004ab129 MyProgram.exe madExcept CallThreadProcSafe
004ab18e MyProgram.exe madExcept ThreadExceptFrame
75223368 kernel32.dll BaseThreadInitThunk
>> created by main thread ($1408) at:
007741a1 MyProgram.exe OtlTaskControl 3080 TOmniThread.Create
main thread ($1408):
0090f52d MyProgram.exe VirtualTrees 33601 TBaseVirtualTree.SortTree
00906fd1 MyProgram.exe VirtualTrees 28348 TBaseVirtualTree.EndUpdate
008f3563 MyProgram.exe VirtualTrees 17031 TBaseVirtualTree.SetRootNodeCount
00b66d99 MyProgram.exe BackupControlFrame 219 TfraBackupControl.AddLog
00b66be2 MyProgram.exe BackupControlFrame 179 TfraBackupControl.AddLog
00b69595 MyProgram.exe BackupControlFrame 844 TfraBackupControl.TimerReadLogTimer
005f430b MyProgram.exe Vcl.ExtCtrls TTimer.Timer
005f41ef MyProgram.exe Vcl.ExtCtrls TTimer.WndProc
0053fca4 MyProgram.exe System.Classes StdWndProc
76777885 USER32.dll DispatchMessageW
00656b87 MyProgram.exe Vcl.Forms TApplication.ProcessMessage
00656bca MyProgram.exe Vcl.Forms TApplication.HandleMessage
00656f05 MyProgram.exe Vcl.Forms TApplication.Run
00b83f34 MyProgram.exe MyProgram 130 initialization
75223368 kernel32.dll BaseThreadInitThunk
thread $22a4:
771d0156 ntdll.dll NtWaitForMultipleObjects
75223368 kernel32.dll BaseThreadInitThunk
thread $1604:
771d0156 ntdll.dll NtWaitForMultipleObjects
761215e3 KERNELBASE.dll WaitForMultipleObjectsEx
752219f7 kernel32.dll WaitForMultipleObjectsEx
76780864 USER32.dll MsgWaitForMultipleObjectsEx
76780b64 USER32.dll MsgWaitForMultipleObjects
004ab129 MyProgram.exe madExcept CallThreadProcSafe
004ab18e MyProgram.exe madExcept ThreadExceptFrame
75223368 kernel32.dll BaseThreadInitThunk
>> created by main thread ($1408) at:
738778e1 gdiplus.dll
thread $3060 (TWorkerThread):
771cf8ca ntdll.dll NtWaitForSingleObject
76121497 KERNELBASE.dll WaitForSingleObjectEx
7522118f kernel32.dll WaitForSingleObjectEx
75221143 kernel32.dll WaitForSingleObject
008e2dbe MyProgram.exe VirtualTrees 6364 TWorkerThread.Execute
004ab243 MyProgram.exe madExcept HookedTThreadExecute
0053c596 MyProgram.exe System.Classes ThreadProc
0040a5b4 MyProgram.exe System 150 ThreadWrapper
004ab129 MyProgram.exe madExcept CallThreadProcSafe
004ab18e MyProgram.exe madExcept ThreadExceptFrame
75223368 kernel32.dll BaseThreadInitThunk
>> created by main thread ($1408) at:
008e2cda MyProgram.exe VirtualTrees 6312 TWorkerThread.Create
thread $22c0:
771d1f3f ntdll.dll NtWaitForWorkViaWorkerFactory
75223368 kernel32.dll BaseThreadInitThunk
thread $33d0:
771cf8ca ntdll.dll NtWaitForSingleObject
76121497 KERNELBASE.dll WaitForSingleObjectEx
7522118f kernel32.dll WaitForSingleObjectEx
004ab129 MyProgram.exe madExcept CallThreadProcSafe
004ab18e MyProgram.exe madExcept ThreadExceptFrame
75223368 kernel32.dll BaseThreadInitThunk
>> created by thread $31fc at:
7327325b rasman.dll
thread $2dc4:
771cf8ca ntdll.dll NtWaitForSingleObject
764b2f7b WS2_32.dll WahReferenceContextByHandle
764b6a25 WS2_32.dll select
004ab129 MyProgram.exe madExcept CallThreadProcSafe
004ab18e MyProgram.exe madExcept ThreadExceptFrame
75223368 kernel32.dll BaseThreadInitThunk
>> created by main thread ($1408) at:
75349791 WININET.dll
thread $2148:
771d1f3f ntdll.dll NtWaitForWorkViaWorkerFactory
75223368 kernel32.dll BaseThreadInitThunk
thread $2258 (TOmniThread): <priority:-15>
771d0156 ntdll.dll NtWaitForMultipleObjects
761215e3 KERNELBASE.dll WaitForMultipleObjectsEx
752219f7 kernel32.dll WaitForMultipleObjectsEx
76780864 USER32.dll MsgWaitForMultipleObjectsEx
00771942 MyProgram.exe OtlTaskControl 2379 TOmniTaskExecutor.WaitForEvent
00770ddc MyProgram.exe OtlTaskControl 2148 TOmniTaskExecutor.MainMessageLoop
0076fb2e MyProgram.exe OtlTaskControl 1849 TOmniTaskExecutor.DispatchMessages
0076e7d9 MyProgram.exe OtlTaskControl 1636 TOmniTaskExecutor.Asy_Execute
0076dd59 MyProgram.exe OtlTaskControl 1354 TOmniTask.InternalExecute
0076db6a MyProgram.exe OtlTaskControl 1274 TOmniTask.Execute
0077423c MyProgram.exe OtlTaskControl 3091 TOmniThread.Execute
0040a5b4 MyProgram.exe System 150 ThreadWrapper
004ab129 MyProgram.exe madExcept CallThreadProcSafe
004ab18e MyProgram.exe madExcept ThreadExceptFrame
75223368 kernel32.dll BaseThreadInitThunk
>> created by thread $1160 (TOmniThread) at:
007741a1 MyProgram.exe OtlTaskControl 3080 TOmniThread.Create
thread $618 (TOTPWorkerThread): <priority:-15>
771d0156 ntdll.dll NtWaitForMultipleObjects
761215e3 KERNELBASE.dll WaitForMultipleObjectsEx
752219f7 kernel32.dll WaitForMultipleObjectsEx
752241d3 kernel32.dll WaitForMultipleObjects
0074b749 MyProgram.exe DSiWin32 1949 DSiWaitForTwoObjects
007782ca MyProgram.exe OtlComm 478 TOmniCommunicationEndpoint.ReceiveWait
007639cc MyProgram.exe OtlThreadPool 625 TOTPWorkerThread.Execute
004ab243 MyProgram.exe madExcept HookedTThreadExecute
0053c596 MyProgram.exe System.Classes ThreadProc
0040a5b4 MyProgram.exe System 150 ThreadWrapper
004ab129 MyProgram.exe madExcept CallThreadProcSafe
004ab18e MyProgram.exe madExcept ThreadExceptFrame
75223368 kernel32.dll BaseThreadInitThunk
>> created by thread $2258 (TOmniThread) at:
0076348c MyProgram.exe OtlThreadPool 537 TOTPWorkerThread.Create
thread $5f0 (TOTPWorkerThread): <priority:-15>
771d0156 ntdll.dll NtWaitForMultipleObjects
761215e3 KERNELBASE.dll WaitForMultipleObjectsEx
752219f7 kernel32.dll WaitForMultipleObjectsEx
752241d3 kernel32.dll WaitForMultipleObjects
0074b749 MyProgram.exe DSiWin32 1949 DSiWaitForTwoObjects
007782ca MyProgram.exe OtlComm 478 TOmniCommunicationEndpoint.ReceiveWait
007639cc MyProgram.exe OtlThreadPool 625 TOTPWorkerThread.Execute
004ab243 MyProgram.exe madExcept HookedTThreadExecute
0053c596 MyProgram.exe System.Classes ThreadProc
0040a5b4 MyProgram.exe System 150 ThreadWrapper
004ab129 MyProgram.exe madExcept CallThreadProcSafe
004ab18e MyProgram.exe madExcept ThreadExceptFrame
75223368 kernel32.dll BaseThreadInitThunk
>> created by thread $2258 (TOmniThread) at:
0076348c MyProgram.exe OtlThreadPool 537 TOTPWorkerThread.Create
thread $2a84 (TOTPWorkerThread): <priority:-15>
771d0156 ntdll.dll NtWaitForMultipleObjects
761215e3 KERNELBASE.dll WaitForMultipleObjectsEx
752219f7 kernel32.dll WaitForMultipleObjectsEx
752241d3 kernel32.dll WaitForMultipleObjects
0074b749 MyProgram.exe DSiWin32 1949 DSiWaitForTwoObjects
007782ca MyProgram.exe OtlComm 478 TOmniCommunicationEndpoint.ReceiveWait
007639cc MyProgram.exe OtlThreadPool 625 TOTPWorkerThread.Execute
004ab243 MyProgram.exe madExcept HookedTThreadExecute
0053c596 MyProgram.exe System.Classes ThreadProc
0040a5b4 MyProgram.exe System 150 ThreadWrapper
004ab129 MyProgram.exe madExcept CallThreadProcSafe
004ab18e MyProgram.exe madExcept ThreadExceptFrame
75223368 kernel32.dll BaseThreadInitThunk
>> created by thread $2258 (TOmniThread) at:
0076348c MyProgram.exe OtlThreadPool 537 TOTPWorkerThread.Create
thread $1ca0 (TOTPWorkerThread): <priority:-15>
771d0156 ntdll.dll NtWaitForMultipleObjects
761215e3 KERNELBASE.dll WaitForMultipleObjectsEx
752219f7 kernel32.dll WaitForMultipleObjectsEx
752241d3 kernel32.dll WaitForMultipleObjects
0074b749 MyProgram.exe DSiWin32 1949 DSiWaitForTwoObjects
007782ca MyProgram.exe OtlComm 478 TOmniCommunicationEndpoint.ReceiveWait
007639cc MyProgram.exe OtlThreadPool 625 TOTPWorkerThread.Execute
004ab243 MyProgram.exe madExcept HookedTThreadExecute
0053c596 MyProgram.exe System.Classes ThreadProc
0040a5b4 MyProgram.exe System 150 ThreadWrapper
004ab129 MyProgram.exe madExcept CallThreadProcSafe
004ab18e MyProgram.exe madExcept ThreadExceptFrame
75223368 kernel32.dll BaseThreadInitThunk
>> created by thread $2258 (TOmniThread) at:
0076348c MyProgram.exe OtlThreadPool 537 TOTPWorkerThread.Create
thread $3248 (TOTPWorkerThread): <priority:-15>
771d0156 ntdll.dll NtWaitForMultipleObjects
761215e3 KERNELBASE.dll WaitForMultipleObjectsEx
752219f7 kernel32.dll WaitForMultipleObjectsEx
752241d3 kernel32.dll WaitForMultipleObjects
0074b749 MyProgram.exe DSiWin32 1949 DSiWaitForTwoObjects
007782ca MyProgram.exe OtlComm 478 TOmniCommunicationEndpoint.ReceiveWait
007639cc MyProgram.exe OtlThreadPool 625 TOTPWorkerThread.Execute
004ab243 MyProgram.exe madExcept HookedTThreadExecute
0053c596 MyProgram.exe System.Classes ThreadProc
0040a5b4 MyProgram.exe System 150 ThreadWrapper
004ab129 MyProgram.exe madExcept CallThreadProcSafe
004ab18e MyProgram.exe madExcept ThreadExceptFrame
75223368 kernel32.dll BaseThreadInitThunk
>> created by thread $2258 (TOmniThread) at:
0076348c MyProgram.exe OtlThreadPool 537 TOTPWorkerThread.Create
thread $11c8:
771d1f3f ntdll.dll NtWaitForWorkViaWorkerFactory
75223368 kernel32.dll BaseThreadInitThunk
引用this answer of another question ,看来OTL用作通信 channel 的Windows消息队列已满。
最佳答案
尝试调用 PostMessage
后,OTL 中引发异常。
procedure TOmniContainerWindowsMessageObserverImpl.Send(aMessage: cardinal;
wParam, lParam: integer);
begin
Win32Check(PostMessage(cwmoHandle, aMessage, wParam, lParam));
end;
该异常表明句柄为cwmoHandle
的窗口的消息队列已满,并且未及时得到服务。当您分配给其 OnMessage
属性时,该窗口的句柄由 TOmniMessageQueue
创建。最有可能的是进行此分配的线程被阻塞(或阻塞时间太长)并且没有及时处理消息。
procedure TOmniMessageQueue.SetOnMessage(const value: TOmniMessageQueueMessageEvent);
begin
if (not assigned(mqWinMsgObserver.OnMessage)) and assigned(value) then begin // set up observer
mqWinMsgObserver.Window := DSiAllocateHWnd(WndProc); // CREATED HERE**
mqWinMsgObserver.Observer := CreateContainerWindowsMessageObserver(
mqWinMsgObserver.Window, MSG_CLIENT_MESSAGE, 0, 0);
ContainerSubject.Attach(mqWinMsgObserver.Observer, coiNotifyOnAllInserts);
mqWinMsgObserver.Observer.Activate;
end
else if assigned(mqWinMsgObserver.OnMessage) and (not assigned(value)) then begin // tear down observer
mqWinMsgObserver.Observer.Deactivate;
ContainerSubject.Detach(mqWinMsgObserver.Observer, coiNotifyOnAllInserts);
FreeAndNil(mqWinMsgObserver.Observer);
DSiDeallocateHWnd(mqWinMsgObserver.Window);
end;
mqWinMsgObserver.OnMessage := value;
end;
为了更具体地回答,我们需要查看更多代码来显示您在何处以及如何实现 OTL 对象。唯一的其他线索是你的帖子是这样的;
thread $1160 (TOmniThread): <priority:-15>
这表明引发异常的线程正在以较低的优先级运行。除了您的应用程序正在主动更改线程优先级之外,这本身并不能解释任何事情。没有代码分析就没法说,但是你的程序结构可能会导致 Priority Inversion阻碍所属线程处理消息的能力的问题。
关于delphi - OmniThreadLibrary - 代码 : 1816. 没有足够的配额来处理此命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25103602/
请在标记为重复之前阅读。 我正在创建一组依赖智能卡进行身份验证的应用程序。到目前为止,每个应用程序都单独控制智能卡读卡器。几周后,我的一些客户将同时使用多个应用程序。因此,我认为创建一个控制身份验证过
我想设置一个小程序,从数据库中检索信息,然后根据请求将该信息分发给另一个程序。例如,一个名为“Master”的程序将从数据库中检索数据并创建一个对象集合(列表、数组等,无论哪种效果最好),然后一个名为
我有两台电脑,都装有 XE2。我以为我在两者上安装了相同的安装,但在其中一个上安装第 3 方软件包时遇到问题,而另一个则正常。 无论如何,我希望两者都一样。最简单的人可能只是通过移入我的 Dropbo
有冲突吗? 最佳答案 所有新版本的 Delphi 始终可以安全地安装到旧版本的下一个版本。 每个新版本都应安装在其自己的目录中。 如果您要安装多个版本,请始终先安装最旧的版本,然后再安装最新版本。 我
快速提问:如果我从代码中删除 // 或 (* *) 中的注释,Delphi 2007 的执行时间会受到影响吗?最终结果是一个可能包含数千行注释的 EXE 文件。 最佳答案 编译器会简单地忽略注释,并且
我必须对照另一个文件检查文件的每一行。 如果第二个文件中存在第一个文件中的一行,则必须删除它。 现在,我正在使用2个列表框,并且“对于listbox1.items.count-1可以开始...” 我的
我正在尝试在访问数据库中添加一些数据。但是我有麻烦,因为这会返回错误: ADOQuery1 missing sql property 实现了对代码的几次修改,到目前为止没有任何效果。 我究竟做错了什么
我用Delphi 5编写了一个程序,在Windows 8 32位PC上可以正常运行。我发现在Windows 7 64位笔记本电脑上运行它最终会导致reallocmem错误,而该错误在32位PC上不会发
看来这是我需要的工具,用于提取XML并与TClientDataset连接。我已经在几篇文章和文档中看到了它,但是我无法在XE2组件列表中找到它-在任何地方!应该在哪里?是否在可能未安装的可选软件包中?
我正在寻找一个非常通用的TDBTree组件,我想听听一些建议。我正在特别寻找一种显示主记录和“ n”个链接表记录的记录。 (我的意思是来自各个表的记录)。例如,TDBTree将钩接到主表,明细表1,附
我需要将按钮制作成旋转三角形的形状(或者说是任何多边形)。谁能提供任何建议? 最佳答案 查看Win32 API CreatePolygonRgn()和SetWindowRgn()函数,以创建一个HRG
你好专家 我的JvPasswordForm1有一个旧的JVC组件。 似乎该组件不再存在:它替换为哪个组件? 重新获得 最佳答案 尝试查找TJvLoginDialog,TjvPassword已合并到其中
几天前,我已经设置了我的开发环境(在装有Win 7的VM和域上的用户的VM上安装了delphi 2009),并安装了我的组件(jedi's,devExpress,ADS等)。 今天,我启动机器,打开d
开始对控件进行子分类的正确位置/时间是什么? 恢复原始窗口proc的正确时间是几点? 现在我在表单创建过程中子类化: procedure TForm1.FormCreate(Sender: TObje
有人可以给我一些有关如何登录访问的网页(使用任何网络浏览器)的指示吗?我应该建立一个全球代理....钩住网络....吗?我需要记录的只是页面地址,而不是其中包含的信息。 我正在使用Delphi。 谢谢
我创建了一个像 TMyClass = class(TObject) private FList1: TObjectList; FList2: TObjectList; public end;
我有一个BPG文件,我已对其进行修改以用作我们公司的自动构建服务器的make文件。为了使其正常工作,我必须进行更改 用途*用途 'unit1.pas'中的unit1 * unit1 'unit2.pa
我将Delphi 7代码迁移到了Delphi XE4。我在Delphi XE4的LoadFromStram方法中遇到错误,但对于Delphi 7来说也可以正常工作。 错误: First chance
我正在尝试学习一些新技巧,以便更好地组织我在 Delphi 中的单元中的一些源代码。 我注意到我访问的一些函数或方法似乎是类中的类,但是我还没有成功地在类中创建一个工作类,虽然它编译得很好,但在执行代
我有一个包含许多类的大单元,现在我想通过将某些类分成新的单元来重构该单元。 我不得不承认我缺乏使用Delphi内置IDE功能的经验。利用内置功能“查找|查找对类型的本地引用”并没有多大帮助,因为类方法
我是一名优秀的程序员,十分优秀!