取消一个方法的执行的正确方法
可能的重复: 如何中止/取消TPL任务? 我有一种方法需要一些时间才能执行,因此我将结果返回为回调.我的方法看起来像: public static void DoWork( Action onCompleteCallBack) { Task.Factory.StartNew( () => { // Do work onCompleteCallBack(someResult); }); } 现在,我希望能够停止执行该方法,以防用户不想等待.结果,这就是我已经解决的问题: static void Main ( string[] args ) { var cancelMethod = DoWork( x => { // method completed Console.Write( x.ToString() ); }); Thread.Slee
0 2024-04-15
编程技术问答社区
响应.重定向的结果是 "对象移到这里"
我正在处理通常最终将其重定向到"文件:" URL的C#ASP.NET页面.在大多数情况下,这似乎在大多数情况下都可以正常工作,但偶尔(并且在我的测试系统上,显然总是总是),而不是重定向到文件,我在页面上获得了一个页面,上面有"对象移至此处"的文本,其中"这里"是我试图重定向到文件的链接,但是在结肠之后有四个斜线,而不是两个斜线(即"文件:////////testserver/docs/testdoc.doc") 通常伴随着"系统. 我在其他地方寻找了一个解决方案,发现了一些有关响应的有趣内容.redirect引起线程型例外,但这似乎不是基本问题 - 在我看来,实际问题是"对象移动的对象在这里"消息,导致例外. 有人得到任何建议,为什么我得到...? 编辑:忘了提及我在IE标签中运行Firefox(3.5.7),所以要提及,当我认为我最好在IE中尝试一下,然后它在IE(7)中工作. 解决方案 仅供将来参考,这可能发生的另一个原因是,如果您执行诸如response
0 2024-04-14
编程技术问答社区
Windows窗体应用程序,线程不会停止
我正在为线程演示使用Windows Form Application.当我单击按钮1时,它将启动线程并递归进行工作. 这里的表格不会如我预期的那样悬挂.单击按钮2时,我想停止当前正在运行的线程.但是这行不通. private void button1_Click(object sender, EventArgs e) { t = new Thread(doWork); // Kick off a new thread t.Start(); } private void button2_Click(object sender, EventArgs e) { t.Abort(); } static void
0 2024-04-14
编程技术问答社区
HttpWebResponse:关闭流
我正在从 httpwebrequest (使用修改版本发出getResponse后,: 您必须调用关闭方法以关闭流并释放连接.不这样做可能会导致您的应用程序用光连接. 那么,这是否意味着一旦我们得到了响应,就必须进行流并关闭流? 我们看到了一些相当奇怪的问题,其中悬挂下载最终淹没了系统.这似乎是资源泄漏的最强候选人,但想知道其他人是否有这个问题的经验. 旁 解决方案 实际上,呼叫Webresponse.close()将关闭响应流. 响应是可识别的,我建议您使用语句. 其他解决方案 呼叫来自文档: 关闭方法关闭响应流,并释放与其他请求重复使用的资源的连接 您必须调用stream.close或httpwebresponse.close.close方法以关闭流并释放连接以重复使用.不必呼叫stream.close和httpwebresponse.close.无法关闭流可能会导致您的应用程序用完连接. 以及您的双重getResponse
0 2024-04-14
编程技术问答社区
ThreadAbortException能否跳过finally?
我所读过的所有声称在线程上的中止都将执行最后一个块,然后再从threadabortexception结束.我想确认这一点,以便我可以计划如何处理可以无限期悬挂的第三方代码.但是,以下测试让我感到困惑: public void runTest(DateTime deadline) { testThread = new Thread(() => { try { Console.WriteLine("test thread started at " + DateTime.Now.ToShortTimeString()); while (true) { } } finally { Console.WriteLine("test thread entered FINALLY at " + DateTime.Now.ToSh
0 2024-04-12
编程技术问答社区
中止对非托管DLL的调用
我有一个不受管理的dll,其函数如果输入参数为较大的值,则可以长时间运行,有时是可取的,但并非总是如此. 我如何在C#中调用此功能,以便在需要时可以中止它? 到目前为止,我试图将呼叫放在单独的线程中,但是中断和流产似乎都停止了该过程,该过程以100%CPU运行,直到完成DLL为止. 是否可以终止运行的DLL代码? 解决方案 不受管理的代码仅在"可警报的等待状态"时可以流产.当它燃烧100%CPU周期时,它不会.假设您可以获得线程句柄,则P/调用终端将起作用,而.NET非常困难.无论如何它都不会有帮助,您将泄漏线程堆栈.在一个兆字节上,您会很快用完虚拟内存.即使这只是偶尔的需求,您仍然有责任遇到主要问题,因为该线程已经突变了全球程序状态,并且您不知道如何恢复它. 中止非托管代码的唯一好方法是在单独的过程中运行它,并用process.kill()将其拍摄.操作系统将清理弹片.您需要为DLL编写一个小托管程序,并使用该过程Interop设施之一与之交谈.插座,名
0 2024-04-12
编程技术问答社区
C#的using语句是否是abort-safe的?
我刚刚阅读了"简而言之的C#4.0"(O'Reilly),我认为这是一本愿意切换到C#的程序员的好书,但这让我想知道.我的问题是using语句的定义.根据这本书(第138页), using (StreamReader reader = File.OpenText("file.txt")) { ... } 精确等效于: StreamReader reader = File.OpenText("file.txt"); try { ... } finally { if (reader != null) ((IDisposable)reader).Dispose(); } 但是,假设这是正确的,并且该代码是在单独的线程中执行的.现在,该线程被thread.Abort()中止,因此抛出了ThreadAbortException,并假设该线程正好在初始化读取器和输入try..finally子句之前.这意味着读者没有被处置! 可能的解决
0 2024-04-12
编程技术问答社区
停止一个正在运行的线程的安全方法是什么?
我有一个线程,其中包含Ironpython脚本的执行.由于某种原因,我可能需要随时停止此线程,包括脚本执行.如何实现这一目标?第一个想法是Thread.Abort(),但众所周知是邪恶的... 解决方案 从您的问题和后续评论中,我可以建议您有两个选择,并带有一些其他"警告": 如果您的线程循环在每次迭代中执行某些内容,则可以设置一个挥发性的布尔标志,以便在完成当前迭代后退出(伪码,因为我不熟悉Python): while shouldExit = false // do stuff 然后,只需将标志设置为true当您希望线程停止时,它将在下次检查条件时停止. 如果您不能等待迭代完成并需要立即停止它,则可以选择Thread.Abort,但绝对可以确保您无法离开打开的文件手柄,插座,锁或在不一致的状态下这样的其他任何事情. 其他解决方案 什么是阻止运行线程的安全方法? 将线程放在自己的过程中.当您要停止时,杀死该过程. 这是杀死线
2 2024-04-11
编程技术问答社区
杀死一个.NET线程
我创建了一个运行特定方法的线程.但是有时我想杀死线程,即使它仍在工作.我怎样才能做到这一点?我尝试了thread.abort(),但它显示了一个消息框,上面写着"中断线程".我应该怎么办? 解决方案 Thread.Abort很危险.取而代之的是,您应该与线程合作,以便可以和平地关闭它.需要设计该线程,以便可以告诉它可以杀死自身,例如,当您希望线程停止时,您将其设置为False的布尔keepGoing标志.然后,线程将具有 之类的东西 while (keepGoing) { /* Do work. */ } 如果线程可能会阻止Sleep或Wait,则可以通过调用try { while (keepGoing) { /* Do work. */ } } catch (ThreadInterruptedException exception) { /* Clean up. */ } 其他解决方案 您实际上只应该将Abort()称为最后一个度假胜地.您可以使用变量来
0 2024-04-10
编程技术问答社区
我如何废除/取消TPL任务?
在线程中,我创建一些System.Threading.Task并启动每个任务. 当我做.Abort()杀死线程时,任务不会中止. 如何将.Abort()传输到我的任务? 解决方案 你不能.任务使用线程池中的背景线程.另外,不建议使用中止方法取消线程.您可以看一下按照博客文章解释了使用取消令牌取消任务的正确方法.这是一个例子: class Program { static void Main() { var ts = new CancellationTokenSource(); CancellationToken ct = ts.Token; Task.Factory.StartNew(() => { while (true) { // do some heavy work here
2 2024-04-10
编程技术问答社区
"Abort trap: 6" 在Mac上运行的C程序
我对此程序有问题.当我尝试在Mac上运行它时,它会返回" Abort Trap:6".我无法理解原因. 以下是我用于测试程序的文件内容. aaabccdegags bbbbbbbcados vbaiusbyabtd aisybavsitvc asindvsivati ammaccabanan 您应该只将这些废话字符串复制到文本文件file.txt中,然后用语法通过命令提示符: program.exe file.txt r 其中file.txt包括废话字符串,r是文本文件中应寻找的字母. #include #include #include #include #define R 24 #define C 71 int main(int argc, char * argv[]) { if (argc!=3){ printf("Errore acquis
2 2024-04-10
编程技术问答社区
当传递包含3个ints数组的Python CTypes结构时中止。
我在Kubuntu Trusty 64位上运行Python 3.4.0-0ubuntu2. 试图为我的其他相关(但不重复)找到一个最小示例时使用Python CTYPE的琐碎代码在呼叫fn1时会导致A SIGABRT. (请注意,在另一种情况下,fn1工作正常,只有fn2 fn2 fn2 fn2 SIGSEGV SIGSEGV.) lib.c: #include typedef struct { int data[3]; } Triplet; void fn1(Triplet t) { fprintf(stderr, "%d, %d, %d\n", t.data[0], t.data[1], t.data[2]); } Triplet fn2(Triplet t) { Triplet temp = {{t.data[0] + 1, t.data[1] + 1, t.data[2] + 1}}; return te
0 2024-04-09
编程技术问答社区
为什么GCC对ARM Cortex-A9产生非法的非对齐访问?
目标:ARM Cortex-A9 GCC版本:4.9.2 大家好, 我对GCC产生核心的问题有问题,该核心会导致数据中止,因为访问不一致.我隔离了一个显示问题的代码.我不知道如何使GCC正确处理.帮助您将不胜感激! struct B { char c1; char c2; char c3; char c4; }; struct A { char c; struct B b; char c2; }; int main(int argc, char** argv) { struct A a; a.c2 = 42; // Works fine a.b.c1 = 42 // Works fine, too struct B b; b = a.b; // Crashes because of unaligned access return 0; }
6 2024-04-09
编程技术问答社区
gdb指向错误的代码行,显示不正确的回溯。
我们可以通过在我们的源代码中有多个中止呼叫来重现这个问题.在下面的示例代码中,我们总共有四个中止呼叫,但在不同条件下,我们使用"优化标志"(-O3)编译时,我们只能看到一个中止呼叫的调试信息.因此 #include #include void level_aa(int a) { if (a == 0) abort(); if (a == 1) abort(); if (a == 2) abort(); abort(); } int main(int argc,char *argv[]) { int D; D = atoi(argv[1]); printf(" Value = %d", D); level_aa(D); return 0
0 2024-04-08
编程技术问答社区
用MPI优雅地退出
如果rdinput返回错误,我正在尝试优雅地退出我的程序. #include #include #include #define MASTER 0 #define Abort(x) MPI_Abort(MPI_COMM_WORLD, x) #define Bcast(send_data, count, type) MPI_Bcast(send_data, count, type, MASTER, GROUP) //root --> MASTER #define Finalize() MPI_Finalize() int main(int argc, char **argv){ //Code if( rank == MASTER ) { time (&start); printf("Initialized at %s\n", ctime (&start) ); //Read
2 2024-04-08
编程技术问答社区
消息框 "程序异常终止 "使我的应用程序一直在运行
...有点.如这个极为简单的例子所示, 很少(到目前为止仅报告一次),我的一个应用程序之一崩溃了.我想在不明确的例外情况下终止它,就像平常一样.我的策略是(低级)记录问题,然后终止.该应用程序是子系统的一部分,如果检测到任何问题,我想(重新)启动它.它是使用C ++--builder 6构建的,并在Windows上运行(XP ... 7,也是8).我了解到abort()很可能导致了错误消息.该应用程序具有GUI,这就是为什么显示消息框,而不仅仅是将(Unbrocking)输出输出为stderr. ,只要用户不接受消息框,我的应用程序显然会运行,例如,它处理计时器(示例中的lifebeats增加)或程序间消息,完全不知道问题. 阅读了一些对的答案后https://stackoverflow.com/a/20213552/2932052"> rise(sigabrt)和abort()方法,我尝试了以下 void mySignalHandler(int sig) {
0 2024-04-08
编程技术问答社区
在VS2010中,abort()不是__declspec(noreturn)。
在我的VS2010副本中,stdlib.h包含(行353-355) _CRTIMP __declspec(noreturn) void __cdecl exit(_In_ int _Code); _CRTIMP __declspec(noreturn) void __cdecl _exit(_In_ int _Code); _CRTIMP void __cdecl abort(void); 我觉得很奇怪,noreturn abort()上没有注释.有人知道这样做的原因吗?是一个错误吗? 编辑:在VS2008中,是相同的,但是stdlib.h 的第371-373行 缺乏noreturn注释正在触发 error c4716 . 进一步参考: c ++ ex noreturn注释,它说abort应该携带它. 编辑:看起来一堆讨论的答案消失了,但是它的要点被缺陷报告#048 . 解决方案 我认为这绝对是错误的,因为无论STD任务是什么,Abort()用Vi
2 2024-04-08
编程技术问答社区
什么时候abort()比exit()更受欢迎?
我知道两个之间的差异.一个值得注意的是,Abort()发送Sigabrt信号,因此当您的软件依赖于它们时,它可能很重要.但是对于典型的应用程序Exit()似乎是Abort()...的更安全版本?还有其他问题要使用Abort()而不是exit()? 解决方案 使用abort如果用户启用了核心转储,将转储核心.因此,作为经验法则,如果您不确定出了什么问题,我会使用abort,以至于通过分析核心转储来获取有用信息的唯一有用信息. 如果您可以从任何给定点安全地exit,并且不需要核心转储,则退出是一种更好的方法. 其他解决方案 使用abort()如果您的程序处于腐败状态,并且您认为尝试进一步做任何事情太危险了. exit()将导致任何atexit函数,并在静态对象的C ++破坏者中被调用.这通常是您想要的干净出口所需的东西,但是例如,如果他们覆盖具有损坏数据的文件,则可能是灾难性的. 其他解决方案 有时您的程序破裂的程度使其状态变得不一致,因此exit()无法正常工
0 2024-04-07
编程技术问答社区
终止陷阱:C程序中的6
我在C中有一个程序.它的编译成功并运行正常,但是在main()的末尾,它崩溃并给我一个错误. 我没有关于如何调试此问题的丝毫线索.关于与Abort trap: 6错误有关的几个问题对我没有太大帮助. 通常,问题是什么? (我现在不愿发布源代码,因为它是大约400行代码.如果我知道要寻找什么,我会发布一块特定的代码.) 注意:我使用GCC在终端运行该程序.但是当我在Xcode中运行它时,我的程序会崩溃,如果停止,它以exit code: 9的结尾. 这是lldb的输出: Process 1191 stopped * thread #1: tid = 0xa759, 0x00007fff8fa08286 libsystem_kernel.dylib`__pthread_kill + 10, queue = 'com.apple.main-thread', stop reason = signal SIGABRT frame #0: 0x00007f
2 2024-04-06
编程技术问答社区
C语言中终止陷阱6错误
我有此代码: void drawInitialNim(int num1, int num2, int num3) { int board[2][50]; //make an array with 3 columns int i; // i, j, k are loop counters int j; int k; for(i=0;i
0 2024-04-06
编程技术问答社区