Borland C ++在没有消息的情况下崩溃

时间:2012-09-03 23:43:26

标签: c++ crash borland-c++

我不确定是否有人使用Borland c ++ 3.1,但我必须这样做。

我有一个实现简单线程的程序,并通过定时器中断更改这些线程的上下文。

我有一个无限循环和2个线程来完成它们的工作,并在彼此和主线程之间进行切换。他们的工作是产生一些输出,在控制台上写东西。 问题是,每次运行程序时,都会发生不同的事情。

有时候它可以工作半分钟而且它会停止写下应该的东西。写只停止并且没有错误,并且borland不会崩溃。 有时它会停止,而borland会在没有消息的情况下崩溃。 有时停止和borland崩溃的消息“非法指令” 有时在它停止之前写的最后一行是一些不应该输出的奇怪字符。

控制台是否“满员”并且borland行为怪异? 可能有什么问题?

2 个答案:

答案 0 :(得分:1)

如果我没记错的话,从中断调用时,在DOS下写入控制台(或使用文件I / O)是不安全的。要正确地执行此操作,您必须检查名为“DOS re-entrancy flag”的内容,并且只有在它为零时才写入控制台(请参阅http://cs.smith.edu/~thiebaut/ArtOfAssembly/CH18/CH18-3.html或在网上搜索以获取更多信息)

答案 1 :(得分:0)

在实际和虚拟8086模式下,程序不会相互保护。所以,如果你的程序搞砸了,例如:

  1. 覆盖不属于它的内存(或本身适当的线程),包括由于程序中的堆栈溢出或其ISR导致的内存损坏
  2. 无法在其任何ISR中保留(=保存,然后恢复)CPU寄存器
  3. 将硬件状态更改为系统其余部分意外的内容
  4. 将计时器频率显着改变为系统的其他方式
  5. 如果它做了这些,那么以某种其他方式崩溃或挂起或行为异常应该不足为奇。

    我猜你上面有问题1和/或2。你也可以在那里遇到竞争条件。

    不幸的是,如果没有看到您的任何代码,我们就无法提供任何帮助。想一想,就像通过电话治疗新病人一样。