两个循环必须同时工作,同时是无限的。我以前用Java和Python做过这个,但是当我在C中尝试这样做时遇到了问题。
如果我在Java中这样做:
public static void main(String[] args)
{
new Thread(new Runnable()
{
@Override
public void run()
{
while (true)
{
// some code
}
}
}).start();
while (true)
{
// some code
}
}
或者在Python中:
def thread():
while True:
# some code
def main():
t = threading.Thread(target = thread)
t.start()
while True:
# some code
if __name__ == '__main__':
main()
一切都好,但是当我在C中这样做时:
void *thread(void *args)
{
while (1)
{
// some code
}
}
int main()
{
pthread_t tid;
pthread_create(&tid, NULL, thread);
pthread_join(tid, NULL);
while (1)
{
// some code
}
return 0;
}
只有线程中的循环运行,编译器在创建线程后根本不会读取代码。那么怎么做呢?
答案 0 :(得分:8)
pthread_join
函数告诉调用线程等到给定的线程完成。由于你开始的线程永远不会结束,main
会永远等待。
删除该函数以允许主线程在启动子线程后继续。
int main()
{
pthread_t tid;
pthread_create(&tid, NULL, thread);
while (1)
{
// some code
}
return 0;
}