【问题标题】:WriteFile() crashes when trying to carry on multithreading尝试进行多线程处理时,WriteFile() 崩溃
【发布时间】:2011-09-23 13:24:32
【问题描述】:

我正在开发一个通过脚本访问的 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()),它会使程序崩溃。当我保持字符串长度,即手动将 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);

请告诉我。

提前致谢。

【问题讨论】:

  • 请出示 tBuffer 的声明
  • 我现在已经在编辑中添加了。抱歉我之前忘记了。
  • 你为什么要做&tBuffer,应该只是tBuffer
  • 使用 &tBuffer 有点奇怪,但应该不是问题。
  • 您是通过脚本还是直接从 DLL 运行应用程序?

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


【解决方案1】:

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

在调用WriteFile 时,您应该使用Length 而不是sizeof(tBuffer)。否则,您的文件中可能会出现垃圾数据(我假设稍后会从其他地方读取)。

【讨论】:

  • 感谢您的回答。会试一试,如果仍然不起作用,请回复。
  • 使用GetBuffer后别忘了打电话给ReleaseBuffer
【解决方案2】:

我猜它会崩溃,因为您正试图直接从您的 DLL 运行它。 Write Function 对我来说看起来不错,我认为如果您尝试从 Python 脚本仅 运行您的程序,它应该可以工作。我之前遇到过类似的情况,得出的结论是不通过调试器运行我的 DLL,而只是通过脚本运行。

请阅读thisthis 了解更多信息。

希望这会有所帮助。

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多