pthread_mutex_t threadMutex;
pthread_cond_t threadCond;
pthread_t thread;
int recvBuffer;
static void * network_loop( void * parg )
{
int socketFd = -1;
socketFd = socket( "Network Socket open" );
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("Server IP address");
addr.sin_port = htons(Server_Listen_Port);
connect( socketFd, (struct socketaddr*)&addr, sizeof(addr) );
while( 1 ) {
pthread_mutex_lock( &threadMutex );
while( isThreadRunning == true ) {
send( socketFd, "request data", strLength, MSG_NOSIGNAL );
recv( socketFd, (void *)&recvBuffer, BUFFER_SIZE, 0 );
test_widget* mTestWidget = (test_widget*)parg;
mTestWidget->update_text( );
}
pthread_mutex_unlock( &threadMutex );
pthread_mutex_lock( &threadMutex );
if( isThreadRunning == false )
pthread_cond_wait( &threadCond, &threadMutex );
pthread_mutex_unlock( &threadMutex );
}
}
void test_widget::update_text( )
{
label
->setText
( QString::number(recvBuffer
) );
}
{
isThreadRunning = false;
pthread_mutex_init( &threadMutex, NULL );
pthread_cond_init( &threadCond, NULL );
pthread_create( &thread, NULL, network_loop, (void *)this );
buttonA->setGeometry( 0, 0, 10, 10 );
buttonB->setGeometry( 20, 0, 10, 10 );
label->setGeometry( 0, 40, 20, 10 );
label->setText( "default" );
connect( buttonA, SIGNAL(clicked()), this, SLOT(buttonA_click()) );
connect( buttonB, SIGNAL(clicked()), this, SLOT(buttonB_click()) );
}
void test_widget::buttonA_click( )
{
isThreadRunning = true;
pthread_cond_signal( &threadCond );
}
void test_widget::buttonB_click( )
{
isThreadRunning = false;
label->setText( "good" );
}
QPushButton * buttonA;
QPushButton * buttonB;
QLabel * label;
pthread_mutex_t threadMutex;
pthread_cond_t threadCond;
pthread_t thread;
int recvBuffer;
static void * network_loop( void * parg )
{
int socketFd = -1;
socketFd = socket( "Network Socket open" );
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("Server IP address");
addr.sin_port = htons(Server_Listen_Port);
connect( socketFd, (struct socketaddr*)&addr, sizeof(addr) );
while( 1 ) {
pthread_mutex_lock( &threadMutex );
while( isThreadRunning == true ) {
send( socketFd, "request data", strLength, MSG_NOSIGNAL );
recv( socketFd, (void *)&recvBuffer, BUFFER_SIZE, 0 );
test_widget* mTestWidget = (test_widget*)parg;
mTestWidget->update_text( );
}
pthread_mutex_unlock( &threadMutex );
pthread_mutex_lock( &threadMutex );
if( isThreadRunning == false )
pthread_cond_wait( &threadCond, &threadMutex );
pthread_mutex_unlock( &threadMutex );
}
}
void test_widget::update_text( )
{
label->setText( QString::number(recvBuffer) );
}
test_widget::test_widget( QWidget * parent ) : QWidget(parent)
{
isThreadRunning = false;
pthread_mutex_init( &threadMutex, NULL );
pthread_cond_init( &threadCond, NULL );
pthread_create( &thread, NULL, network_loop, (void *)this );
buttonA = new QPushButton( parent );
buttonB = new QPushButton( parent );
label = new QLabel( parent );
buttonA->setGeometry( 0, 0, 10, 10 );
buttonB->setGeometry( 20, 0, 10, 10 );
label->setGeometry( 0, 40, 20, 10 );
label->setText( "default" );
connect( buttonA, SIGNAL(clicked()), this, SLOT(buttonA_click()) );
connect( buttonB, SIGNAL(clicked()), this, SLOT(buttonB_click()) );
}
void test_widget::buttonA_click( )
{
isThreadRunning = true;
pthread_cond_signal( &threadCond );
}
void test_widget::buttonB_click( )
{
isThreadRunning = false;
label->setText( "good" );
}
To copy to clipboard, switch view to plain text mode
Bookmarks