簡體   English   中英

線程間通訊

[英]InterThread communication

我在客戶端服務器應用程序上工作,我需要發送從腳本文件讀取的命令。

腳本文件的格式如下。

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命令時將啟動它,當該程序遇到時將關閉
    在配置中遇到斷開連接。
  2. 主線程將從配置文件中讀取命令並執行。

現在,當遇到匹配時,主線程應將匹配字符串發送到偵聽器線程進行匹配,然后在那里等待偵聽器線程的信號。

偵聽器線程會將字符串與從服務器接收到的數據進行匹配(如果匹配),它將把事件(SetEvent()窗口)選到主線程,然后如果時間流逝,主線程將以其他方式記錄“找到匹配”,然后它將記錄為“未找到匹配項”

我想到了一個全局變量char * g_MatchString。只要有match命令,主線程就會更新此變量,並等待事件(windows event)被選中,並且等待時間等於匹配時間。

無論我的方法是否正確,我都需要你們的意見。

不要使用全局。 當將來有人增加復雜性時,這只會創造出潛在的競賽條件。 匹配字符串應作為輸入參數傳遞給線程。 您沒有說明如何啟動線程,但是如果使用_beginthread(),則只需分配一個緩沖區並將其傳遞給arglist參數中的_beginthread()。 當偵聽器線程終止時,主線程可以安全地釋放匹配字符串緩沖區。 如果添加了其他線程,這將使其保持良好的獨立性,並避免潛在的競爭條件。 如果使用CreateThread()啟動線程,則可以通過lpParameter參數將其傳遞。

除了全球之外,我認為您的做法是正確的。

由於主線程正在等待偵聽器線程,並且偵聽器線程的唯一目的是讀取入站數據,因此建議您完全放棄偵聽器線程,然后讓主線程直接進行讀取。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM