我不确定是否有人使用Borland c ++ 3.1,但我必须这样做。
我有一个实现简单线程的程序,并通过定时器中断更改这些线程的上下文。
我有一个无限循环和2个线程来完成它们的工作,并在彼此和主线程之间进行切换。他们的工作是产生一些输出,在控制台上写东西。 问题是,每次运行程序时,都会发生不同的事情。
有时候它可以工作半分钟而且它会停止写下应该的东西。写只停止并且没有错误,并且borland不会崩溃。 有时它会停止,而borland会在没有消息的情况下崩溃。 有时停止和borland崩溃的消息“非法指令” 有时在它停止之前写的最后一行是一些不应该输出的奇怪字符。
控制台是否“满员”并且borland行为怪异? 可能有什么问题?
答案 0 :(得分:1)
如果我没记错的话,从中断调用时,在DOS下写入控制台(或使用文件I / O)是不安全的。要正确地执行此操作,您必须检查名为“DOS re-entrancy flag”的内容,并且只有在它为零时才写入控制台(请参阅http://cs.smith.edu/~thiebaut/ArtOfAssembly/CH18/CH18-3.html或在网上搜索以获取更多信息)
答案 1 :(得分:0)
在实际和虚拟8086模式下,程序不会相互保护。所以,如果你的程序搞砸了,例如:
如果它做了这些,那么以某种其他方式崩溃或挂起或行为异常应该不足为奇。
我猜你上面有问题1和/或2。你也可以在那里遇到竞争条件。
不幸的是,如果没有看到您的任何代码,我们就无法提供任何帮助。想一想,就像通过电话治疗新病人一样。