线程在执行第三方代码的时候, 如何在超过某个时间片之后, 跳出第三方代码

lvshaoqing 2013-02-25 07:44:34
线程在执行第三方代码的时候, 如何在超过某个时间片之后, 跳出第三方代码.

或者线程在执行自己的函数, 当这个函数耗时过多时, 跳出这个函数, 执行其他代码.
...全文
255 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2013-03-15
  • 打赏
  • 举报
回复
为这个第三方专门搞个线程/进程。
moolleychean 2013-03-15
  • 打赏
  • 举报
回复
没有找问题的根本原因而在这里想变通的办法不是一个程序员的本性。
zilaishuichina 2013-03-15
  • 打赏
  • 举报
回复
如果可以这样的话 那大家就再也不用烦恼死循环的问题了
lm_whales 2013-03-15
  • 打赏
  • 举报
回复
SuspendThread,GetThreadContext,SetThreadContext,ResumeThread
lm_whales 2013-03-15
  • 打赏
  • 举报
回复
获取代码的线程句柄,暂停那个线程,切换现场,给那个线程换上新的执行代码。重启被停掉的线程。现在线程不在执行原来的代码了!!想重新执行那段代码,在同样切换会回去就是了!
luciferisnotsatan 2013-02-26
  • 打赏
  • 举报
回复
引用 13 楼 lvshaoqing 的回复:
引用 11 楼 luciferisnotsatan 的回复:lz的意思是不是如下 ... while(1) {} ... while这个空循环运行2分钟后,自己跳出这个while,继续跑循环之后的代码? 就我了解,如果自己不在里面写逻辑,没什么语言能做到你要的效果 对, 就是这个效果... 以前用中断可以实现这个....
中断时怎么做到的? 没拥有第三方代码,能做的就是起个定时器,超时后杀掉这个线程。没法让线程跳到后面,执行代码。除非像1楼说的,篡改一些线程数据。但这样的话,像delete之类的语句可能就被你跳过了。
lvshaoqing 2013-02-26
  • 打赏
  • 举报
回复
引用 14 楼 zhoujielunzhimi 的回复:
可是你的第三方函数 在阻塞的时候 又不会告诉你,那你怎么知道他什么时候阻塞呢?
阻塞的时间, 只能在该函数上运行一个时间段...
lvshaoqing 2013-02-26
  • 打赏
  • 举报
回复
引用 12 楼 qingcairousi 的回复:
这个建议你用进程替换线程会好一些,强制杀掉进程多少比杀线程安全。
恩, 算是个做法吧, 如果实在不行的话, 也只能这样了...
sumos 2013-02-26
  • 打赏
  • 举报
回复
可是你的第三方函数 在阻塞的时候 又不会告诉你,那你怎么知道他什么时候阻塞呢?
lvshaoqing 2013-02-26
  • 打赏
  • 举报
回复
引用 11 楼 luciferisnotsatan 的回复:
lz的意思是不是如下 ... while(1) {} ... while这个空循环运行2分钟后,自己跳出这个while,继续跑循环之后的代码? 就我了解,如果自己不在里面写逻辑,没什么语言能做到你要的效果
对, 就是这个效果... 以前用中断可以实现这个....
qingcairousi 2013-02-26
  • 打赏
  • 举报
回复
这个建议你用进程替换线程会好一些,强制杀掉进程多少比杀线程安全。
luciferisnotsatan 2013-02-26
  • 打赏
  • 举报
回复
lz的意思是不是如下 ... while(1) {} ... while这个空循环运行2分钟后,自己跳出这个while,继续跑循环之后的代码? 就我了解,如果自己不在里面写逻辑,没什么语言能做到你要的效果
lvshaoqing 2013-02-26
  • 打赏
  • 举报
回复
引用 9 楼 zhoujielunzhimi 的回复:
引用 8 楼 lvshaoqing 的回复:引用 7 楼 zhoujielunzhimi 的回复:引用 6 楼 lvshaoqing 的回复:引用 5 楼 zhoujielunzhimi 的回复:把函数放到线程中,超时后把线程挂起 但该线程依然无法跳出当前函数... 如果第三方代码卡死, 该线程就死定了... 你不是要跳出吗? 难道说线程挂起后还在执行函数?? ……
主要原因是: 在运行第三方代码的时候, 可能因为某些原因, 线程阻塞的第三方函数上. 我的目的主要是: 线程被第三方代码阻塞一段时间后, 能够不再继续等待, 而是同一个线程运行其他事务. 因为, 如果线程被阻塞, 则下一个任务调用同一个第三方函数, 需要另外一个线程.
sumos 2013-02-26
  • 打赏
  • 举报
回复
引用 8 楼 lvshaoqing 的回复:
引用 7 楼 zhoujielunzhimi 的回复:引用 6 楼 lvshaoqing 的回复:引用 5 楼 zhoujielunzhimi 的回复:把函数放到线程中,超时后把线程挂起 但该线程依然无法跳出当前函数... 如果第三方代码卡死, 该线程就死定了... 你不是要跳出吗? 难道说线程挂起后还在执行函数?? 我是想该线程跳出函数, 能去执行其他事……
越说越不明白了,你想 完成什么 目的,能否说的十分详细? 挂起后为什么就不能执行其他事了? 你还想继续执行该函数那就恢复线程啊,或者说让该函数一直执行,不挂起
lvshaoqing 2013-02-26
  • 打赏
  • 举报
回复
引用 7 楼 zhoujielunzhimi 的回复:
引用 6 楼 lvshaoqing 的回复:引用 5 楼 zhoujielunzhimi 的回复:把函数放到线程中,超时后把线程挂起 但该线程依然无法跳出当前函数... 如果第三方代码卡死, 该线程就死定了... 你不是要跳出吗? 难道说线程挂起后还在执行函数??
我是想该线程跳出函数, 能去执行其他事情... 被挂起后, 该线程不就不能用了么...
sumos 2013-02-26
  • 打赏
  • 举报
回复
引用 6 楼 lvshaoqing 的回复:
引用 5 楼 zhoujielunzhimi 的回复:把函数放到线程中,超时后把线程挂起 但该线程依然无法跳出当前函数... 如果第三方代码卡死, 该线程就死定了...
你不是要跳出吗? 难道说线程挂起后还在执行函数??
lvshaoqing 2013-02-26
  • 打赏
  • 举报
回复
引用 5 楼 zhoujielunzhimi 的回复:
把函数放到线程中,超时后把线程挂起
但该线程依然无法跳出当前函数... 如果第三方代码卡死, 该线程就死定了...
sumos 2013-02-26
  • 打赏
  • 举报
回复
把函数放到线程中,超时后把线程挂起
赵4老师 2013-02-26
  • 打赏
  • 举报
回复
Process and Thread Functions The following functions are used with processes and threads. AttachThreadInput CommandLineToArgvW CreateProcess CreateProcessAsUser CreateRemoteThread CreateThread ExitProcess ExitThread FreeEnvironmentStrings GetCommandLine GetCurrentProcess GetCurrentProcessId GetCurrentThread GetCurrentThreadId GetEnvironmentStrings GetEnvironmentVariable GetExitCodeProcess GetExitCodeThread GetGuiResources GetPriorityClass GetProcessAffinityMask GetProcessPriorityBoost GetProcessShutdownParameters GetProcessTimes GetProcessVersion GetProcessWorkingSetSize GetStartupInfo GetThreadPriority GetThreadPriorityBoost GetThreadTimes OpenProcess ResumeThread SetEnvironmentVariable SetPriorityClass SetProcessAffinityMask SetProcessPriorityBoost SetProcessShutdownParameters SetProcessWorkingSetSize SetThreadAffinityMask SetThreadIdealProcessor SetThreadPriority SetThreadPriorityBoost Sleep SleepEx SuspendThread SwitchToThread TerminateProcess TerminateThread ThreadProc TlsAlloc TlsFree TlsGetValue TlsSetValue WaitForInputIdle Job Object Functions The following functions are used with job objects. AssignProcessToJobObject CreateJobObject OpenJobObject OpenJobObjectToken QueryInformationJobObject SetInformationJobObject TerminateJobObject UserHandleGrantAccess Fiber Functions The following functions are used with fibers. ConvertThreadToFiber CreateFiber DeleteFiber FiberProc GetCurrentFiber GetFiberData SwitchToFiber Obsolete Functions WinExec Yield
lvshaoqing 2013-02-26
  • 打赏
  • 举报
回复
引用 2 楼 qq120848369 的回复:
做不到...
linux 线程取消 也不行么?
加载更多回复(8)

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧