首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InterThread通信

InterThread通信
EN

Stack Overflow用户
提问于 2011-09-05 05:33:55
回答 2查看 463关注 0票数 0

我正在处理客户机服务器应用程序,在那里我需要发送从脚本文件读取的命令。

脚本文件的格式如下。

代码语言:javascript
复制
CONNECT <www.abcd.com,80>
SEND :           AB 40 01 FF 00 00 00 09 01 01 07 00 00 C0 A8 01 87 AE 
MATCH<s,10>:     AB 40 01 FF 00 00 00 09 01 01 07 00 00 C0 A8 01 87 AE
SEND :       AB 34 01 FF00 00 00 0C 01 01 07 00 01 01 07 00 FF FF FF FF AE 
DISCONNECT
note: s in match is wait time in seconds.
here second byte is Msg ID.

当遇到匹配命令时,程序应该等待指定的第二次匹配,然后继续执行下一个命令。

我在应用程序中运行了两个线程。

  1. 侦听器线程-它将从服务器接收数据。(这里使用select())

它将在程序遇到connect命令时启动,并在

在配置中遇到断开连接。

  • 主线程,它将从配置文件中读取命令并执行。

现在,当匹配遇到时,主线程应该将匹配字符串发送到侦听器线程进行匹配,然后在那里等待来自侦听器线程的信号。

侦听器线程将将字符串与从服务器接收的数据匹配,如果匹配,则将事件(SetEvent() windows)单个到主线程,然后主线程将记录“找到的匹配”(如果时间被缩短,则将记录为“匹配未找到”)。

我想让一个全局变量char* g_MatchString.The主线程在有match命令的时候更新这个变量,然后等待事件(windows事件)被单身,等待时间等于匹配时间。

我需要你们的意见,不管我的方法是否正确。

EN

回答 2

Stack Overflow用户

发布于 2011-09-07 22:57:13

不要使用全局的。这只是创造了潜在的种族条件时,有人增加了复杂性在未来。匹配字符串应作为输入参数传递给线程。您没有说明如何启动线程,但是如果使用_beginthread(),只需分配一个缓冲区并将其传递给arglist参数中的_beginthread()。当侦听器线程终止时,主线程可以安全地释放匹配字符串缓冲区。如果添加了额外的线程,这将保持它很好地自我包含,并且不受潜在的竞争条件的影响。如果使用CreateThread()启动线程,则将通过lpParameter参数传递它。

除了全球范围外,我认为你的做法是合理的。

票数 1
EN

Stack Overflow用户

发布于 2011-09-05 07:39:42

由于主线程正在等待侦听器线程,而侦听器线程的唯一目的是读取入站数据,所以我建议完全摆脱侦听器线程,让主线程直接进行读取。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7304186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档