我想知道如何在每次按下某個鍵時運行線程以休眠一段時間。例如,如果我按兩次相同的鍵,它應該有兩個線程睡一會兒。Pthread和鍵盤
我MUST使用並行線程和C++。
老實說,我已經嘗試了很多方法,但我仍然不知道如何解決它。
很抱歉,如果我的英語不是很好:)
UPDATE
這是我的代碼:
#include <pthread.h>
#include <iostream>
#include <unistd.h>
using namespace std;
pthread_mutex_t mutex;
pthread_cond_t cond;
int a;
void* executer2(void*)
{
pthread_mutex_lock(&mutex);
while (a > 0) {
pthread_cond_wait(&cond, &mutex);
}
cout << "Thread: " << pthread_self() << endl;
sleep(a);
pthread_mutex_unlock(&mutex);
}
void* executer(void*)
{
int key;
while (1) {
pthread_mutex_lock(&mutex);
key = cin.get();
if (key == 'a') {
cout << "Sleep for 4 seconds" << endl;
a = 4;
} else if (key == 'b') {
cout << "Sleep for 8 seconds" << endl;
a = 8;
} else {
cout << "Sleep for 2 seconds" << endl;
a = 2;
}
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
sleep(1);
}
}
int main()
{
pthread_t tr, t;
pthread_attr_t attr;
pthread_mutex_init(&mutex, NULL);
pthread_cond_init(&cond, NULL);
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
pthread_create(&tr, &attr, executer, NULL);
pthread_create(&t, &attr, executer2, NULL);
pthread_join(tr, NULL);
pthread_join(t, NULL);
}
你有什麼具體的問題?你試過什麼了?線程是否成功產卵? – Cameron 2013-03-09 05:31:32
我可以創建一個線程,但是如果我再次按下一個鍵,我必須等到我的另一個線程完成我的新線程執行 – Chu 2013-03-09 05:33:33
從你所說的,當按下一個鍵時你將線程連接在一起,只是不加入它們並簡單地創建一個新的,就像你對第一個一樣。 – Benjamin 2013-03-09 05:40:25