2013-12-16 94 views
0

我有兩個函數,我需要將它們兩個並行運行,所以我在主函數中爲它們創建了線程。代碼如下所示:在win32中執行線程的步驟

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) 
{ 
...... 

    _beginthread(ModbusRead,0,(void*)12); 
    _beginthread(ModbusWrite,0,(void*)10); 
} 

這兩個函數是ModbusRead和ModbusWrite。

我已經在我的代碼中只實現了這兩行線程,並且它們與主函數的主線程並行地運行這兩個函數。

讓我們說功能ModbusRead在thread1中,而ModbusWrite在thread2中。我必須做下面的事情。

function ModbusWrite(thread2) 
{ 
    if (condition1 true) 
    { 
     Pause thread1(donot run function ModbusRead) 

     if(condition2 true) 
       { 
        resume thread1(restart function ModbusRead) 
       } 
    } 
} 

由於我是新來的線程我正在我的遊蕩線程執行是否正確與否,我怎麼能滿足上述條件。

+0

它看起來像你想要互相排斥或某種事件/信號。像這樣的線程間通信是一個相當複雜的問題,在這種情況下可能不是可以充分解釋的問題,因爲它需要謹慎的設計以避免死鎖和其他問題。您可以嘗試引用有關同步的MSDN文檔:http://msdn.microsoft.com/en-us/library/windows/desktop/ms686353(v=vs.85).aspx –

+0

這與[您的問題相同另一個](http://stackoverflow.com/questions/20603507/what-is-the-correct-synchronization-method-for-the-thread-in-win32)? – chwarr

+0

是一個相似的..只是嘗試不同的方式,我不能粘貼代碼,所以我創建了更詳細的另一個問題 – user3048644

回答

0

線程1必須是一個循環,每次循環都檢查一個事件。未設置事件時,線程將在WaitForSingleObject處暫停。

while (WAIT_OBJECT_0 == WaitForSingleObject(hEvent, INFINITE)) 
{ 
    ...do some thread work 
} 

其他線程最初使用CreateEvent,然後使用SetEvent或ResetEvent來恢復/暫停thread1。線程不會立即暫停:只有當它的循環返回到WaitForSingleObject。

在實踐中,您可能還需要一種方式在線程退出時發出信號。這可以通過使用WaitForMultipleObjects完成,其中一個事件用於恢復/暫停,第二個事件用於退出。