2013-12-16 68 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完成,其中一个事件用于恢复/暂停,第二个事件用于退出。