2011-03-21 81 views
1

我正在使用多线程应用程序,我正在使用SetEvent()来关闭窗口上的线程。如何在linux中发信号线?

什么是在linux C++中发送信号给线程的等价物?该应用程序必须在Windows和Linux上运行。

在Windows中,我做了以下内容:

在UI我有一个按钮,说关闭线程。一旦用户按下按钮,它将使用SetEvent()来设置事件,这导致线程自行停止。

void closethread() 
{ 
    Setevent(hEventhandle); 
} 


void * threadProc(void* args) 
{ 
    waitforsingleobject(hEventhandle,infintie) 
} 

当用户按下按钮时有没有更好的方式关闭线程?

回答

3

如果您正在编写跨平台的GUI应用程序,那么您可能已经使用了一些跨平台的GUI框架,如QtWxWidgets。这些框架通常都有自己的跨平台库,用于各种各样的事情,包括多线程。因此,不要使用本机API,请查看您(希望)使用的框架的文档。

或者,您可以考虑使用Boost.Thread以便携方式处理多线程。

+0

是的,我可以使用QT。 – 2011-03-21 10:13:37

+0

@Chris_vr:Qt内置了一个线程安全的信号机制,所以你应该使用它。 – 2011-03-21 10:16:14

+0

我不知道QT可以提供与QT事件管理API相关的链接,例如 – 2011-03-21 10:16:33

2

您可以使用条件变量 - 请参阅pthread_cond_wait

+1

如果您想保持无知,请使用QT/wx。如果你真的想*知道*如何在多个平台上做简单的事情而不诉诸厚的包装,请阅读pthreads。 – 2011-03-22 07:53:25