WriteFile()在尝试进行多线程时崩溃

时间:2011-09-23 13:24:33

标签: c++ dll mfc serial-port msdn

我正在处理一个通过脚本访问的mfc dll,所有这一切都正常。我已经添加了一个多线程组件,并尝试使用WriteFile()函数写入我的串口,但是在第二个写命令执行后,WriteFile()函数以某种方式退出应用程序。

没有多线程位,一切正常,我可以应用尽可能多的writefile命令。

多线程:我正在使用

CreateThread(NULL,0,WorkerThread,this,0,0);

创建我的主题。使用“WorkerThread”执行前面描述的writefile操作。

另外,我需要在按照我定义的间隔写入时使用Sleep()函数。目前,该程序在尝试使用Sleep()时退出。所以,我暂时将其删除,但稍后会需要它。

这是一个已知的问题还是一个有明显解决方案的东西?

更新:我有点试图到达接近问题的地方,但仍然无法解决问题。显然我的WriteFile()参数看起来有些问题。

WriteFile(theApp.m_hCom,tBuffer,sizeof(tBuffer),&iBytesWritten,NULL);

没有正确地使用sizeof(tBuffer),因为它正在崩溃。我检查了要传递的字符串,这与我需要传递的字符串完全相同但是如果我像上面所做的那样编写代码(对于WriteFile())它会崩溃程序。当我保持stringlength,即手动将sizeof(tBuffer)参数设置为14时,程序运行但命令没有执行,因为缓冲区的总字符串大小为38.迫切需要帮助。

CString sStore = "$ABCDEF,00000020,01000000C1200000*##\r\n";

char tBuffer[256];

memset(tBuffer,0,sizeof(tBuffer));

int Length = sizeof(TCHAR)* sStore.GetLength();

memcpy(&tBuffer,sStore.GetBuffer(),Length);
and then sending it with the WriteFile command.


WriteFile(theApp.m_hCom,tBuffer,sizeof(tBuffer),&iBytesWritten,NULL);

请告诉我。

提前致谢。

2 个答案:

答案 0 :(得分:2)

这是错误的:sizeof(TCHAR)。由于您使用的是char,因此您应该使用sizeof(char)TCHAR可以是1或2个字节......

在致电WriteFile时,您应使用Length代替sizeof(tBuffer)。否则你可能会在你的文件中得到垃圾数据(我假设以后会从其他地方读取)。

答案 1 :(得分:1)

我猜它崩溃是因为你试图直接从你的DLL运行它。 Write Function看起来很好,我想如果你试图从 Python脚本运行程序,它应该可以工作。我之前遇到过类似的问题,结果是没有通过调试器运行我的DLL而只是脚本。

请阅读thisthis了解详情。

希望这有帮助。

祝你好运!