[英]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.
當遇到匹配命令時,程序應等待匹配指定的秒數,然后繼續執行下一個命令。
我在應用程序中運行了兩個線程
現在,當遇到匹配時,主線程應將匹配字符串發送到偵聽器線程進行匹配,然后在那里等待偵聽器線程的信號。
偵聽器線程會將字符串與從服務器接收到的數據進行匹配(如果匹配),它將把事件(SetEvent()窗口)選到主線程,然后如果時間流逝,主線程將以其他方式記錄“找到匹配”,然后它將記錄為“未找到匹配項”
我想到了一個全局變量char * g_MatchString。只要有match命令,主線程就會更新此變量,並等待事件(windows event)被選中,並且等待時間等於匹配時間。
無論我的方法是否正確,我都需要你們的意見。
不要使用全局。 當將來有人增加復雜性時,這只會創造出潛在的競賽條件。 匹配字符串應作為輸入參數傳遞給線程。 您沒有說明如何啟動線程,但是如果使用_beginthread(),則只需分配一個緩沖區並將其傳遞給arglist參數中的_beginthread()。 當偵聽器線程終止時,主線程可以安全地釋放匹配字符串緩沖區。 如果添加了其他線程,這將使其保持良好的獨立性,並避免潛在的競爭條件。 如果使用CreateThread()啟動線程,則可以通過lpParameter參數將其傳遞。
除了全球之外,我認為您的做法是正確的。
由於主線程正在等待偵聽器線程,並且偵聽器線程的唯一目的是讀取入站數據,因此建議您完全放棄偵聽器線程,然后讓主線程直接進行讀取。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.