<![CDATA[Latest posts for the topic "Thực thi lệnh trong C độc lập với chương trình chính!"]]> /hvaonline/posts/list/23.html JForum - http://www.jforum.net Thực thi lệnh trong C độc lập với chương trình chính! /hvaonline/posts/list/12830.html#75513 /hvaonline/posts/list/12830.html#75513 GMT Thực thi lệnh trong C độc lập với chương trình chính! Theo mình biết thì khi một chương trình được thực thi thì nó sẽ quét tuần tự từ trên xuống và từ trái qua phải(không biết có đúng không nữa hì hì...)  ==> tức là thế nào, mình kô hiểu. Quét cái gì ở đây.
có cách nào khi chạy 1 chương trình thì có 1 lệnh có thể chạy độc lập với chương trình chính được hay không?có nghia là khi thực thi chương trình chính ở một thời điểm nào đó (hoặc khi bắt đầu chương trình) một lệnh (hoặc hàm ) đó được gọi và chạy độc lập với chương trình chính, còn chương trình chính thì sau khi gọi lệnh(hoặc hàm đó) thì vẫn tiếp tục quét các lệnh tiếp theo bất kể là lệnh (hoặc hàm)đó có kết thúc hay chưa. Mình đã thử dùng lệnh gọi một chương trình khác (trong file khác )chạy song song nhưng chương trình chính vẫn đợi chương trình sau chạy xong thì mới thực thi tiếp tục.Ai biết giúp mình với  
==> nghe nó giống kiểu xử lý song song nhỉ. Nếu bạn có nhu cầu tìm hiểu thì tìm đọc về lập trình đa luồng (multithreading). Ở đây, bạn tạo thành 2 chương trình con và tống nó vào 2 luồng (thread) riêng biệt. Việc lập trình đa luồng là một kiến thức khó (đối với những ai chưa nắm rõ ngôn ngữ lập trình). :mrgreen:
Mục đích của mình là khi thực thi một chương trình thì bắt đầu hẹn giờ nếu sau khoảng thời gian (do mình cài đặt)nếu người dùng không thõa một số điều kiện do chương trình yêu cầu thì chương trình sẽ tự động thực thi lệnh khác.  
==> trong thời gian đấy, chương trình chính bị dừng lại hay làm việc khác :))]]>
/hvaonline/posts/list/12830.html#75650 /hvaonline/posts/list/12830.html#75650 GMT
Thực thi lệnh trong C độc lập với chương trình chính! http://softpixel.com/~cwright/programming/threads/threads.c.php]]> /hvaonline/posts/list/12830.html#75651 /hvaonline/posts/list/12830.html#75651 GMT Thực thi lệnh trong C độc lập với chương trình chính!

le_quoc_bao wrote:
Theo mình biết thì khi một chương trình được thực thi thì nó sẽ quét tuần tự từ trên xuống và từ trái qua phải(không biết có đúng không nữa hì hì...).Vậy cho mình hỏi trong C (chạy trong môi trường Dos) có cách nào khi chạy 1 chương trình thì có 1 lệnh có thể chạy độc lập với chương trình chính được hay không?có nghia là khi thực thi chương trình chính ở một thời điểm nào đó (hoặc khi bắt đầu chương trình) một lệnh (hoặc hàm ) đó được gọi và chạy độc lập với chương trình chính, còn chương trình chính thì sau khi gọi lệnh(hoặc hàm đó) thì vẫn tiếp tục quét các lệnh tiếp theo bất kể là lệnh (hoặc hàm)đó có kết thúc hay chưa. Mình đã thử dùng lệnh gọi một chương trình khác (trong file khác )chạy song song nhưng chương trình chính vẫn đợi chương trình sau chạy xong thì mới thực thi tiếp tục.Ai biết giúp mình với :|-)) . Mục đích của mình là khi thực thi một chương trình thì bắt đầu hẹn giờ nếu sau khoảng thời gian (do mình cài đặt)nếu người dùng không thõa một số điều kiện do chương trình yêu cầu thì chương trình sẽ tự động thực thi lệnh khác. Thank so much!  
Lập ra ứng dụng -> ứng dụng cần được thi hành trên một nền nào đó :D; do đó mà khả năng và chức năng của ứng dụng cũng phụ thuộc vào khả năng và chức năng của nền :D Ứng dụng bạn tạo đc thi hành trên DoS - một môi trường đơn nhiệm. Nên không thể thi hành đa luồng được đâu. Nếu bạn tìm hiểu kĩ ra, DoS được chạy trên các máy tính sử dụng vi xử lý 8086 của Intel. Vi xử lý này không hỗ trợ chế độ bảo vệ, chỉ là xử lý đơn nhiệm. Những vi xử lý đời sau, từ 80286 và đặc biệt từ 80386 trở đi, chế độ bảo vệ (hoạt động đa nhiệm) mới được hỗ trợ. Những khái niệm như task rồi thread chỉ có ở những hệ thống đa nhiệm. Nên việc mà bạn muốn chạy một chương trình song song chương trình khác trên môi trường DoS là không thể. Trên môi trường DoS, nếu một ứng dụng đang được thi hành, có nghĩa ứng dụng đó toàn quyền. thực ra mà nói có những chương trình vẫn đang chạy cùng, đó là những ngắt (thường chú trong bộ nhớ), nhưng bản chất hoạt động không phải là multi thread Do đó mà việc bạn muốn xây dựng một chương trình theo như bạn mô tả, tôi nghĩ là khó khăn đó :D; trên DoS với C có lẽ ta chỉ dừng ở việc lập trình theo sự kiện mà thôi :D]]>
/hvaonline/posts/list/12830.html#75669 /hvaonline/posts/list/12830.html#75669 GMT
Re: Thực thi lệnh trong C độc lập với chương trình chính! /hvaonline/posts/list/12830.html#75685 /hvaonline/posts/list/12830.html#75685 GMT Re: Thực thi lệnh trong C độc lập với chương trình chính! Code:
#include <pthread.h>
#include <stdio.h>

/* This is our thread function.  It is like main(), but for a thread*/
void *threadFunc(void *arg)
{
	char *str;
	int i = 0;

	str=(char*)arg;

	while(i < 110 )
	{
		usleep(1);
		printf("threadFunc says: %s\n",str);
		++i;
	}

	return NULL;
}

int main(void)
{
	pthread_t pth;	// this is our thread identifier
	int i = 0;

	pthread_create(&pth,NULL,threadFunc,"foo");
	
	while(i < 100)
	{
		usleep(1);
		printf("main is running...\n");
		++i;
	}

	printf("main waiting for thread to terminate...\n");
	pthread_join(pth,NULL);

	return 0;
}
sau đó thì biến thể chút xíu để ra chương trình của bồ, vì mình ko biết bồ muốn làm gì với chương trình nên ko thể coding ra đây được. Thân.]]>
/hvaonline/posts/list/12830.html#75696 /hvaonline/posts/list/12830.html#75696 GMT
Re: Thực thi lệnh trong C độc lập với chương trình chính!

trinhcongson_us wrote:
@le_quoc_bao: Bồ nên đọc link mà bác l0ng3ta đưa cho, trong đó nói rất kỷ về lập trình đa nhiệm trong dos, và có cả ví dụ nữa. đoạn chương trình mà bồ cần nghiên cứu là : Code:
#include <pthread.h>
#include <stdio.h>

/* This is our thread function.  It is like main(), but for a thread*/
void *threadFunc(void *arg)
{
	char *str;
	int i = 0;

	str=(char*)arg;

	while(i < 110 )
	{
		usleep(1);
		printf("threadFunc says: %s\n",str);
		++i;
	}

	return NULL;
}

int main(void)
{
	pthread_t pth;	// this is our thread identifier
	int i = 0;

	pthread_create(&pth,NULL,threadFunc,"foo");
	
	while(i < 100)
	{
		usleep(1);
		printf("main is running...\n");
		++i;
	}

	printf("main waiting for thread to terminate...\n");
	pthread_join(pth,NULL);

	return 0;
}
sau đó thì biến thể chút xíu để ra chương trình của bồ, vì mình ko biết bồ muốn làm gì với chương trình nên ko thể coding ra đây được. Thân. 
Bồ nên phân biệt giữa MultiTasking và MultiThreading,thêm nưa link mà bác L0ng3ta đưa ra đâu phải cho DOS.]]>
/hvaonline/posts/list/12830.html#75768 /hvaonline/posts/list/12830.html#75768 GMT
Re: Thực thi lệnh trong C độc lập với chương trình chính! /hvaonline/posts/list/12830.html#75774 /hvaonline/posts/list/12830.html#75774 GMT Thực thi lệnh trong C độc lập với chương trình chính! /hvaonline/posts/list/12830.html#75796 /hvaonline/posts/list/12830.html#75796 GMT Thực thi lệnh trong C độc lập với chương trình chính! /hvaonline/posts/list/12830.html#75866 /hvaonline/posts/list/12830.html#75866 GMT Re: Thực thi lệnh trong C độc lập với chương trình chính! thực hiện 1 lệnh khác ........; } } Mình cảm ơn maihoahn về đoạn code mà bạn hướng dẫn nhưng mà maihoahn ơi! Đoạn code đó vẫn không ổn ở chổ khi chương trình chính quét tới "thực hiện 1 lệnh khác" là 1 lệnh dừng chờ người dùng nhập thông số hay xác nhận một thông tin chẳng hạn. Nếu người dùng không nhập hoặc không có 1 action nào hết thì chương trình sẽ đứng mãi mãi vì khi đó vòng while bên trên chưa được tái lặp mặc dù thời gian hiện tại đã quá thời gian qui định. ]]> /hvaonline/posts/list/12830.html#76692 /hvaonline/posts/list/12830.html#76692 GMT Thực thi lệnh trong C độc lập với chương trình chính! /hvaonline/posts/list/12830.html#76735 /hvaonline/posts/list/12830.html#76735 GMT Thực thi lệnh trong C độc lập với chương trình chính! /hvaonline/posts/list/12830.html#77554 /hvaonline/posts/list/12830.html#77554 GMT