2014-09-02 80 views
0

我知道如何使用CreateProcess函数来运行进程或exe。我有一个奇怪的问题,我的程序在i2c通信过程中以某种方式停止。当我使用Telnet或使用CreateProcess命令运行任何测试程序时,它会再次开始工作。Wince - CreateProcess函数做什么

我不确定CreateProcess实际上在做什么。有没有人有这方面的知识?

感谢, Dnai

回答

0

CreateProcess简单地推出一个新的可执行它,它自己的进程空间中的操作系统,可选在命令行参数发送。

它不会“做”其他任何事情。它对任何系统总线或驱动程序(如I2C)都没有影响。如果你的应用程序正在停止,那么这可能是一个计时问题或驱动程序错误。这当然不是CreateProcess电话。

+0

我同意你这绝对不是eCreateProcess调用。我想在这里理解的是为什么CreateProcess使系统从停止状态再次运行。它释放了一些memeory,即堆栈,堆等,还是可以释放互斥量,信号量。或者甚至它创建新的线程,所以它可能会导致一些线程重置等?我想知道它在它自己的进程空间中启动一个新的可执行文件时的真正作用。所以我可以用类似的方法解决我的暂停问题。 – MicroXP 2014-09-02 16:52:57

0

创建一个新进程可能会强制刷新缓存。如果您的驱动程序因为通过缓存指针访问I2C而停滞不前,那么强制刷新的操作将导致在下一个上下文切换时实际从设备读取数据,并允许您的进程继续运行。但这仅仅是一个猜测。

+0

实际上这是很好的建议。我想尝试一下。你知道我怎么能证实这一点?有没有你想要参考的测试代码? – MicroXP 2014-09-03 14:51:34

+0

您谈到了I2C通信,因此我会研究相关I2C驱动程序/库中的代码。 – 2014-09-06 14:01:27

+0

这就是我现在正在做的。但我怀疑它是否真的是I2C问题。我只是想明白,通过createprocess运行一个exe实际上正在做什么,重置某些东西和问题似乎已经解决了。我的意思是重置缓存,堆栈,线程,semphores,mutex或其他任何东西。谢谢。 – MicroXP 2014-09-08 15:48:46